javascript:promi实现异步循环

更新时间:2023-07-21 11:14:18 阅读: 评论:0

exhibitionist
javascript:promi实现异步循环
quaker需求场景⼤概就是:调⽤的⽅法是异步的。需要遍历参数,循环调⽤这个⽅法。拿到所有⽅法执⾏的结果,才能进⾏下⼀步。
所以说,需要在循环⾥⾯执⾏异步⽅法,然后正确拿到所有结果。
乘客英语刚⾯临这个问题的时候我是拒绝的,对于我这个还没出新⼿村的菜鸟来说,异步,还循环,离谱,总不能callback⼀层⼀层套进去吧。
然后我想到了递归,但是有风险,递归不好处理异常,挂⼀个倒⼀⽚。
personal interest最终选择的处理⽅式是:promi和promi.all()。
promi 简单⽰例:
var promi = new Promi(function(resolve, reject) {
// resolve()在⽅法执⾏完成时调⽤,告诉程序⽅法执⾏完了
// reject()在⽅法执⾏异常时调⽤,告诉程序⽅法挂了
bear的音标...此处是⼀个异步⽅法
if(异步⽅法执⾏成功){
// 可以传参
resolve(successData);
}el if(异步⽅法执⾏失败){
// 可以传参
reject(failedData);
}
});
thumbkin
promi.then(function(data){
// 进⼊这个⽅法,意味着promi⾥⾯的⽅法执⾏完成,
/
/ promi的状态变成fulfilled或者rejected
// data 就是resolve()或者reject传过来的参数
console.log("异步⽅法执⾏完成...");
})
promi简单粗陋地解释,它就是⼀个对象,它的⼀⽣有三种状态:pending(进⾏中),fulfilled(执⾏成功),rejected(执⾏失败),并且三种状态互斥。
promi从诞⽣伊始处于Pending状态,调⽤resolve()⽅法可以使其变成fulfilled状态,调⽤reject()⽅法可以使其变成rejected状态。fulfilled状态和rejected状态都能触发then()⽅法。
再通俗点说就是,在promi对象⾥写⼀段异步执⾏的代码,当这段代码执⾏完毕的时候,调⽤resolve()⽅法,调⽤resolve()⽅法,调⽤resolve()⽅法,那么就能触发then()⽅法。
then()⽅法是可以链式写下去的,但是需要在上⼀个then()⽅法⾥返回⼀个新的promi对象。
现在进⼊正题,怎么循环异步
thriller
bluntly
核⼼⽅法就是:创造⼀个promi数组promiArray,然后调⽤Promi.all(promiArray).then(function(data){});
Promi.all会在整个promi数组⾥的promi执⾏完成以后,调⽤then()⽅法,并且返回所有promi的参数。
例⼦:
var promiArray = [];
for(var i = 0;i<10;i++){
promiArray.push(new Promi(function(resolve,reject){
console.log("创建了⼀个promi");
...//⼀段异步代码
if(异步执⾏成功){
// 改变promi的状态,告诉程序这个promsie执⾏完成并执⾏成功了
resolve(data);
}el if(异步执⾏失败){
thegift// 改变promi的状态,告诉程序这个promsie执⾏失败了
reject(data);
}
}));
}
Promi.all(promiArray).then(data){
console.log("所有promi执⾏完成");
// 并且所有执⾏的结果都在data⾥⾯了,处理它们吧
}
现行犯
promi 异步循环,能⽤,好⽤,感恩的⼼,感谢promi.
记得调resolve()⽅法哦。

本文发布于:2023-07-21 11:14:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/184191.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:状态   循环   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图