3 回答

TA贡献1887条经验 获得超5个赞
async function readFiles(files) { for(const file of files) { await readFile(file); }};
async function* readFiles(files) { for(const file of files) { yield await readFile(file); }};
var readFiles = function(files) { var p = Promise.resolve(); // Q() in q files.forEach(file => p = p.then(() => readFile(file)); ); return p;};
var readFiles = function(files) { return files.reduce((p, file) => { return p.then(() => readFile(file)); }, Promise.resolve()); // initial};
var Promise = require("bluebird");var fs = Promise.promisifyAll(require("fs")); var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 }); // if the order matters, you can use Promise.each instead and omit concurrency paramreadAll.then(function(allFileContents){ // do stuff to read files.});

TA贡献1811条经验 获得超4个赞
function runSerial() { var that = this; // task1 is a function that returns a promise (and immediately starts executing) // task2 is a function that returns a promise (and immediately starts executing) return Promise.resolve() .then(function() { return that.task1(); }) .then(function() { return that.task2(); }) .then(function() { console.log(" ---- done ----"); });}
有更多任务的案子呢?比如,10?
function runSerial(tasks) { var result = Promise.resolve(); tasks.forEach(task => { result = result.then(() => task()); }); return result;}

TA贡献1936条经验 获得超6个赞
reduce
.
reduce
reduce
Promise.resolve([])
reduce
promise
func
then
reduce
/* * serial executes Promises sequentially. * @param {funcs} An array of funcs that return promises. * @example * const urls = ['/url1', '/url2', '/url3'] * serial(urls.map(url => () => $.ajax(url))) * .then(console.log.bind(console)) */const serial = funcs => funcs.reduce((promise, func) => promise.then(result => func().then(Array.prototype.concat.bind(result))), Promise.resolve([]))
// broken down to for easier understandingconst concat = list => Array.prototype.concat.bind(list)const promiseConcat = f => x => f().then(concat(x))const promiseReduce = (acc, x) => acc.then(promiseConcat(x))/* * serial executes Promises sequentially. * @param {funcs} An array of funcs that return promises. * @example * const urls = ['/url1', '/url2', '/url3'] * serial(urls.map(url => () => $.ajax(url))) * .then(console.log.bind(console)) */const serial = funcs => funcs.reduce(promiseReduce, Promise.resolve([]))
// first take your workconst urls = ['/url1', '/url2', '/url3', '/url4'] // next convert each item to a function that returns a promiseconst funcs = urls.map(url => () => $.ajax(url)) // execute them seriallyserial(funcs) .then(console.log.bind(console))
添加回答
举报