Skip to content

Instantly share code, notes, and snippets.

@azu
Last active August 29, 2015 14:01
Show Gist options
  • Save azu/1e66a42cf90e37c0c296 to your computer and use it in GitHub Desktop.
Save azu/1e66a42cf90e37c0c296 to your computer and use it in GitHub Desktop.
"use strict";
var assert = require("power-assert");
var sequence = require("../lib/promise-sequence").sequencePromises;
describe("promise-sequence", function () {
it("should sequence promises", function () {
var promisedIdentity = [1, 2, 4, 8, 16, 32].map(function (value) {
return function identify() {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(value);
}, value);
})
}
});
var startDate = Date.now();
return sequence(promisedIdentity).then(function (values) {
console.log(Date.now() - startDate + "ms");// 約64ms
assert.deepEqual(values, [1, 2, 4, 8, 16, 32]);
});
});
});
"use strict";
function sequencePromises(promises) {
var results = [];
var pushResult = Array.prototype.push.bind(results);
return promises.reduce(function (prevPromise, promisedIdentity) {
return prevPromise.then(function () {
return Promise.resolve(promisedIdentity()).then(pushResult);
});
}, Promise.resolve()).then(function () {
return results;
});
}
module.exports.sequencePromises = sequencePromises;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment