跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > async/await实现Promise.all()

async/await实现Promise.all()

时间:2024-03-27 16:40:55 来源:网络cs 作者:言安琪 栏目:卖家故事 阅读:

标签: 实现 
阅读本书更多章节>>>>

🐱个人主页:不叫猫先生
🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。
💫系列专栏:vue3从入门到精通
📝个人签名:不破不立

目录

一、Promise.all()简介二、async/await实现Promise.all()1、方式一2、方式二 三、async/await与Promise.all()结合使用

一、Promise.all()简介

Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且只返回一个Promise实例,并且输入的所有 promise 的 resolve 回调的结果是一个数组

Promise的 resolve 回调执行是在所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候Promise的 reject 回调执行是只要任何一个输入的 promise 的 reject 回调执行或者输入不合法的 promise 就会立即抛出错误,并且只要有 reject 就会立即抛出的错误信息

二、async/await实现Promise.all()

先定义三个Promise实例对象,并放置于一个数组中

        let a = new Promise((res, rej) => {res(1)}).catch(err => console.log(err))let b = new Promise((res, rej) => {setTimeout(() => {rej(2)}, 2000)}).catch(err => console.log(err))let c = new Promise((res, rej) => {res(3)}).catch(err => console.log(err))       const arr = [a, b, c]

1、方式一

-使用async/await,循环遍历Promise实例对象的数组,并把每个Promise对象的结果放置于一个空数组中。

async function bb() {let arr1 = [];try {for (let i = 0; i < arr.length; i++) {let h = await arr[i]arr1.push(h)}} catch (err) {}return arr1}bb().then(res => {console.log(res); //[1, undefined, 3]});

undefined是因为await只处理成功时resolve(),不处理失败异常,故返回undefined

2、方式二

该方面类似实现手写Promise.acll(),等await拿到Promise结果然后count加1,知道count的数值等于数值的长度在resolve()

      const all = (arr) => {  return new Promise((resolve, reject) => {let length = arr && arr.lengthlet count = 0let result = []if (!arr || arr.length === 0) {resolve(result)}arr.forEach(async (item, index) => {try {const res = await itemresult[index] = rescount++if (count === length ) {resolve(result)}} catch (err) {reject(err)}});})}

三、async/await与Promise.all()结合使用

因为Promise.all()返回的也是Promise,所以await 后面可以跟Promise.all()

         function fn() {return new Promise((resolve, reject) => {resolve(Math.random())})}async function asyncFunc() {let resulttry {result = await Promise.all([fn(), fn()])console.log(result)} catch (err) {console.log(err, 'err')}return result}      asyncFunc().then(res => { console.log(res, 'res') })
阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-03-27/149598.html,文章来源:网络cs,作者:言安琪,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论