es6 Promise 串行执行
发布于 7 年前 作者 lwcbest 5440 次预览 最后一次回复是 7 年前 来自 分享
并行执行Promise.all() 那么串行怎么写? 直接上代码:
const promisesFuncs = [promise1,promise2,...];
const computeSinglePromise = function (promisesFuncs, initParams) {
let resultsArray = [];
return promiseFuncs.reduce((promise, fn, index) => {
console.log("reduce start", index);
return promise.then((result) => {
resultsArray.push(result);
return fn(result);
});
}, Promise.resolve(initParams))
.then(() => {
return resultsArray;
});
};
8 回复
https://github.com/sindresorhus/promise-fun 你值得拥有
原生的
.then就是串行的; 如果你的串行没有依赖关系,用bluebird吧 Promise.map 方法可以配置并发数; 也还可以试试我写的一个基于Promise的队列 promise-queue-plus简单的异步流控制用原生的或者第三方promise插件,复杂的就上异步流大杀器 rxjs
大致思路供参考
rxjs 的逻辑清晰多了
可对结果数据处理
https://github.com/zy445566/block-run 之前实现过,给你参考了,相同渠道串行执行
@cnwhy 感谢, 原生的then确实是串行,但是我读100个文件不能去写100个then啊
@atian25 我这1个方法是可以搞定了的
@lwcbest 我只是分享下,已经有人写好了很多 lib,选一个适合的用就好了,它也是一个个的独立包的。
对我日常的使用场景来说,因为都有 await,直接一个 for 循环执行即可,如果是 node6 的话,就包个 co 。这样更直观。
for await of?