方法 | 结果 | 策略 |
---|---|---|
Promise.all | 失败一个就结束, 返回错误值, 全对就成功, 返回结果数组 | 防止有失败的情况,全部成功才能下一步 |
Promise.allSettled | 所有结束后返回Object数组, 带status和value属性 | 只为了全部执行,全部执行完才能下一步 |
Promise.any | 有一个成功就成功, 立即结束, 即使失败的比成功的先结束, 也等一个成功的 都不成功的话会报错 AggregateError: All promises were rejected | 所有函数都尝试一下,成功一个就算成功 |
Promise.race | 第一个成功或失败就结束, 返回结果 | 所有函数都尝试一下,只关心第一个成功或失败 |
只有allSettled会把所有结果汇总起来,其他三个只关心一个
<script>
async function test() {
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1);
}, 1000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(2);
}, 2000)
})
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(3);
}, 500)
})
var start_date = new Date();
await Promise.all([p1, p2, p3]).then(function (results) {
console.log("结束all", new Date() - start_date, results)
}).catch(res => { console.log("失败all", new Date() - start_date, res); });
}
async function test2() {
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1);
}, 1000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(2);
}, 2000)
})
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(3);
}, 500)
})
var start_date = new Date();
await Promise.allSettled([p1, p2, p3]).then(function (results) {
console.log("结束allSettled", new Date() - start_date, results)
}).catch(res => { console.log("失败allSettled", new Date() - start_date, res); });
}
async function test3() {
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1);
}, 1000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(2);
}, 2000)
})
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(3);
}, 500)
})
var start_date = new Date();
await Promise.any([p1, p2, p3]).then(function (results) {
console.log("结束any", new Date() - start_date, results)
}).catch(res => { console.log("失败any", new Date() - start_date, res); });
}
async function test4() {
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1);
}, 1000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(2);
}, 2000)
})
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject(3);
}, 500)
})
var start_date = new Date();
await Promise.race([p1, p2, p3]).then(function (results) {
console.log("结束race", new Date() - start_date, results)
}).catch(res => { console.log("失败race", new Date() - start_date, res); });
}
async function alltest() {
await test();
await test2();
await test3();
await test4();
}
alltest()
</script>