javascript : promise实现异步循环
2021/8/30 17:36:15
本文主要是介绍javascript : promise实现异步循环,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求场景大概就是:调用的方法是异步的。需要遍历参数,循环调用这个方法。拿到所有方法执行的结果,才能进行下一步。
所以说,需要在循环里面执行异步方法,然后正确拿到所有结果。
刚面临这个问题的时候我是拒绝的,对于我这个还没出新手村的菜鸟来说,异步,还循环,离谱,总不能callback一层一层套进去吧。
然后我想到了递归,但是有风险,递归不好处理异常,挂一个倒一片。
最终选择的处理方式是:promise和promise.all()。
promise 简单示例:
var promise = new Promise(function(resolve, reject) { // resolve()在方法执行完成时调用,告诉程序方法执行完了 // reject()在方法执行异常时调用,告诉程序方法挂了 ...此处是一个异步方法 if(异步方法执行成功){ // 可以传参 resolve(successData); }else if(异步方法执行失败){ // 可以传参 reject(failedData); } }); promise.then(function(data){ // 进入这个方法,意味着promise里面的方法执行完成, // promise的状态变成fulfilled或者rejected // data 就是resolve()或者reject传过来的参数 console.log("异步方法执行完成..."); })
promise简单粗陋地解释,它就是一个对象,它的一生有三种状态:pending(进行中),fulfilled(执行成功),rejected(执行失败),并且三种状态互斥。
promise从诞生伊始处于Pending状态,调用resolve()方法可以使其变成fulfilled状态,调用reject()方法可以使其变成rejected状态。
fulfilled状态和rejected状态都能触发then()方法。
再通俗点说就是,在promise对象里写一段异步执行的代码,当这段代码执行完毕的时候,调用resolve()方法,调用resolve()方法,调用resolve()方法,那么就能触发then()方法。
then()方法是可以链式写下去的,但是需要在上一个then()方法里返回一个新的promise对象。
现在进入正题,怎么循环异步
核心方法就是:创造一个promise数组promiseArray,然后调用Promise.all(promiseArray).then(function(data){});
Promise.all会在整个promise数组里的promise执行完成以后,调用then()方法,并且返回所有promise的参数。
例子:
var promiseArray = []; for(var i = 0;i<10;i++){ promiseArray.push(new Promise(function(resolve,reject){ console.log("创建了一个promise"); ...//一段异步代码 if(异步执行成功){ // 改变promise的状态,告诉程序这个promsie执行完成并执行成功了 resolve(data); }else if(异步执行失败){ // 改变promise的状态,告诉程序这个promsie执行失败了 reject(data); } })); } Promise.all(promiseArray).then(data){ console.log("所有promise执行完成"); // 并且所有执行的结果都在data里面了,处理它们吧 }
promise 异步循环,能用,好用,感恩的心,感谢promise.
记得调resolve()方法哦。
这篇关于javascript : promise实现异步循环的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?