实现 Promise.all,所有 Promise 成功返回成功,一个失败返回失败
发布日期:2024-02-09 19:29:46
浏览次数:64
分类:博客文章
本文共 1894 字,大约阅读时间需要 6 分钟。
首先我们先创建一个resolve和reject的promise函数
const promiseResove = (promiseResolveSecond = function(n=0){
return new Promise(function(resolve, reject){ setTimeout(function() { resolve({ resolveAfterSeconds: n }) }, n * 100); })}) const promiseReject = (promiseRejectSecond = function(n=0) { return new Promise(function(resolve, reject) { setTimeout(function () { reject({ rejectAfterSeconds: n }) }, n * 100) })})使用上面的函数创建一个所有结果能正确返回的promise.all程序
var promiseArray = []
promiseArray.push(promiseResove(1))promiseArray.push(promiseResove(3))promiseArray.push(promiseResove(2)) var handlePromise = Promise.all(promiseArray)handlePromise.then(function(values) { console.log('all promise are resolved', values)}).catch(function(reason) { console.log('promise reject failed reason', reason)})然后在创建一个拥有reject函数返回的promise
var promiseArray = []
promiseArray.push(promiseResove(1))promiseArray.push(promiseReject(3))promiseArray.push(promiseResove(2)) var handlePromise = Promise.all(promiseArray)handlePromise.then(function(values) { console.log('all promise are resolved', values)}).catch(function(reason) { console.log('promise reject failed reason', reason)})
当promise.all
中有一个promise执行失败返回reject时,promise.all直接返回执行失败的promise结果。
但我们还想看到其他两个resolve的结果,所以后面用一个trick方法,来解决这个问题。
var promiseArray = []
promiseArray.push(promiseResove(1))promiseArray.push(promiseReject(3))promiseArray.push(promiseResove(2)) // 将传入promise.all的数组进行遍历,如果catch住reject结果,// 直接返回,这样就可以在最后结果中将所有结果都获取到var handlePromise = Promise.all(promiseArray.map(function(promiseItem) { return promiseItem.catch(function(err) { return err })}))handlePromise.then(function(values) { console.log('all promise are resolved', values)}).catch(function(reason) { console.log('promise reject failed reason', reason)})和之前唯一的不同就是在promise添加了一个回调函数,当数组中有接口reject时,catch住结果直接返回,这样失败的结果也可以当做成功处理,所以在promise.all中我们可以监听到所有结果的返回,然后在针对不同的返回值进行处理。
转载地址:https://www.cnblogs.com/judyhuayu/p/16730897.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年08月23日 19时11分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux系统的selinux管理
2019-05-24
linux系统的网络桥接配置及链路聚合
2019-05-24
关于DNS部署
2019-05-24
关于数据库管理mariadb
2019-05-24
类的内存模型(二)
2019-05-24
生产者消费者模型
2019-05-24
#剑指Offer Day1 单向链表中倒数第k个节点
2019-05-24
#剑指offer Day2 一类可以用“框架”快速搞定的二叉树问题
2019-05-24
#剑指offer Day3 一类 “ 斐波那契 ”问题
2019-05-24
#剑指offer Day4 一类 “ 双指针 ”问题
2019-05-24
#剑指offer Day5 # 分享两个题的其他解法
2019-05-24
缓存淘汰算法的实现与应用介绍(LRU,LFU)
2019-05-24
JZ15. 反转链表
2019-05-24
1. 两数之和
2019-05-24
2. 两数相加
2019-05-24
JZ1.二维数组的查找
2019-05-24
3.无重复字符的最长子串
2019-05-24
JZ3. 从尾到头打印链表
2019-05-24
String 类
2019-05-24