最新看到一个比较有趣的面试题:
怎么串行执行 Promise ?
这里简单给大家介绍下解答。针对多个 Promise 方法,原生提供了 all 和 race 方法。但是,他们都不是串行执行。那应该如果执行串行方法?这里介绍两种写法:
递归执行
简单来说就是在 then 方法里面递归传递下一次异步方法:then(next())
function iteratorPromise(arr){ (function iter(){ if(arr.length) arr.shift()().then(iter) })()}let arr = [()=>{ return new Promise(res=>{ console.log("run", Date.now()); res() })},()=>{ return new Promise(res=>{ console.log("run", Date.now()); res() })},()=>{ return new Promise(res=>{ console.log("run", Date.now()); res() })}]iteratorPromise(arr);// outputrun 1529918098567run 1529918098568run 1529918098569循环调用
这种办法比较取巧,直接利用 Promise.resolve()。通过循环赋值,得到最终的结果。
function iteratorPromise(arr){ let res = Promise.resolve(); arr.forEach(fn=>{ res = res.then(()=>fn()) // 关键是 res=res.then... 这个逻辑 })}let arr = [()=>{ return new Promise(res=>{ setTimeout(()=>{ console.log("run", Date.now()); res() },1000) })},()=>{ return new Promise(res=>{ setTimeout(()=>{ console.log("run", Date.now()); res() },1000) })},()=>{ return new Promise(res=>{ setTimeout(()=>{ console.log("run", Date.now()); res() },1000) })}]iteratorPromise(arr);// outputrun 1529918643573run 1529918644574run 1529918645580原文发布时间为:2018年06月25日
继续阅读与本文标签相同的文章
-
这儿有一个使你网页性能提升10倍的工具
2026-06-02栏目: 教程
-
使用 Node.js 开发简单的脚手架工具
2026-06-02栏目: 教程
-
由一个bug找到JS挖矿代码
2026-06-02栏目: 教程
-
关于Java健壮性的一些思考与实践!
2026-06-02栏目: 教程
-
送给前端的干货 ,1000篇前端学习资料大合集!(上)
2026-06-02栏目: 教程
