selfish
7/16/2015 - 8:51 AM

Bluebird Promise Sequences

Bluebird Promise Sequences

var Promise = require('bluebird');

// waterfall
Promise.sequence = function (tasks) {
    var current = Promise.cast();
    for (var k = 0; k < tasks.length; ++k) {
        current = current.then(tasks[k]);
    }
    return current;
};

// sequence without passing (waterfalling) results to the next item
Promise.sequence = function(tasks) {
    var current = Promise.cast();
    for (var k = 0; k < tasks.length; ++k) {
        current = current.thenReturn().then(tasks[k]);
    }
    return current.thenReturn();
};

// Waterfall but returning all results instead of the last one
Promise.sequence = function(tasks) {
    var current = Promise.cast(), results = [];
    for (var k = 0; k < tasks.length; ++k) {
        results.push(current = current.then(tasks[k]));
    }
    return Promise.all(results);
};

// Sequence without waterfalling, returning all results
Promise.sequence = function(tasks) {
    var current = Promise.cast(), results = [];
    for (var k = 0; k < tasks.length; ++k) {
        results.push(current = current.thenReturn().then(tasks[k]));
    }
    return Promise.all(results);
};