date: 2020-07-13 20:26
title: [day95]Promise.all?
Promise.all中任何一个Promise出现错误的时候都会执行reject,导致其它正常返回的数据也无法使用。你有什么解决办法么?
1)在单个的catch中对失败的promise请求做处理
2)把reject操作换成 resolve(new Error(“自定义的error”))
3)引入Promise.allSettled
const promises = [fetch('/api1'),fetch('/api2'),fetch('/api3'),];Promise.allSettled(promises).then((results) => results.forEach((result) => console.log(result.status)));// "fulfilled"
4)安装第三方库 promise-transaction
// 它是promise事物实现 不仅仅能处理错误还能回滚import Transaction from 'promise-transaction';const t = new Transaction([{name: 'seed',perform: () => Promise.resolve(3),rollback: () => false,retries: 1, // optionally you can define how many retries you like to run if initial attemp fails for this step},{name: 'square',perform: (context) => {return Promise.resolve(context.data.seed * context.data.seed);},rollback: () => false,},]);return t.process().then((result) => {console.log(result); // should be value of 9 = 3 x 3});
