当前位置: 首页 > Web前端 > HTML5

Promise.allAPI错误处理

时间:2023-04-05 14:36:16 HTML5

Promise.all使用场景:假设我们想要许多Promise并行执行,并等待它们全部就绪。一个实际的例子是:并行下载多个url,所有url下载完成后进行后续的业务逻辑处理。语法:letpromise=Promise.all(iterable);Promise.all接受一个可迭代对象(通常是一组Promise)并返回一个新的Promise。当所有列出的Promise都被resolve时,新的Promise也将resolve,并且它们的结果数组成为新Promise对象的结果。例如下面的Promise.all在3秒后变为fulfillment,那么它的结果就是一个数组[1,2,3]:Promise.all([newPromise(resolve=>setTimeout(()=>resolve(1),3000)),//1newPromise(resolve=>setTimeout(()=>resolve(2),2000)),//2newPromise(resolve=>setTimeout(()=>resolve(3),1000))//3]).then(警报);//1,2,3当promise准备好时:每个promise贡献一个数组成员请注意,结果数组成员的顺序与它们在源promise中的顺序相同。尽管第一个Promise花费了最长的时间来解析,但它仍然是结果数组中的第一个。一个常见的技巧是将一组作业数据映射到一组Promise中,然后将其包装在Promise.all中。例如,如果我们有一组URL,我们可以这样获取它们:leturls=['https://api.github.com/users/iliakan','https://api.github.com/users/remy','https://api.github.com/users/jeresig'];//将每个url映射到fetchletrequests=urls.map(url=>fetch(url));//Promise.all等到所有作业都被解决Promise.all(requests).then(responses=>responses.forEach(response=>alert(`${response.url}:${response.status}`)));在调试器中,看到requests数组的前三个元素,状态都是pending:看到requests变成状态后,传入then的result数组:then方法执行一次,状态变成fulfilled:一个实际的使用Promise.all并发读取多个Github用户记录的例子:letnames=['iliakan','remy','jeresig'];letrequests=names.map(name=>fetch(`https://api.github.com/users/${name}`));Promise.all(requests).then(responses=>{//所有响应已成功解析for(letresponseofresponses){alert(`${response.url}:${response.status}`);//为每个url显示200}returnresponses;})//maparra将y个响应放入response.json()数组中以读取其内容。then(responses=>Promise.all(responses.map(r=>r.json())))//所有JSON答案都被解析:“users"是它们的数组.then(users=>users.forEach(user=>alert(user.name)));