race和all 都是将多个Promise 封装成一个新的Promise。
race的方法执行结果取决于第一个Promise的返回结果,reject则执行catch,resolve则执行then,不会等待定时器的执行,会将定时器时间执行时间短的结果返回
const p1 = new Promise(function (resolve, reject) {reject("fail");})
const p2 = new Promise(function (resolve, reject) {setTimeout(function () {resolve("success2");},3000)}
Promise.race([p1,p2]).then(resposes=> {
console.log(resposes);
}).catch(error=>{
console.log(error);
})
执行结果为 fail,走的catch
all 所有Promise的结果都返回resolve才会执行then,返回结果为一个存放所有结果的数组里,如果有任何一个返回reject,则执行catch,如果第一个Promise是有延迟执行的 则会等待执行完才继续
const p1 = new Promise(function (resolve, reject) {setTimeout(function () {resolve("success1");},3000)})
const p2 = new Promise(function (resolve, reject) {resolve("success2");})
Promise.all([p1,p2]).then(resposes=> {
console.log("all"+resposes);
}).catch(error=>{
console.log("allerror"+error);
})
执行的结果 success2 ,success1,
allSettled 只有等到所有这些参数实例都返回结果,不管是fulfilled还是rejected,包装实例才会结束。