场景:当两个毫无相关的promise执行完成之后,才进行下一步动作
两个Promise全部执行成功就用Promise.all(),
如果看情况而定,以第一个Promise的结果来进行判定那使用Promise.race()
上传代码:
<script>
// 场景:当两个promise毫无相关需要全部执行成功之后,才做下一个动作
const moviePromise = new Promise((reslove, reject) => {
setTimeout(() => {
reslove({ name: '摔跤吧!爸爸', rating: 9.2, year: 2016 })
}, 2000);
})
const usersPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(['mojobo', 'vanpelt', 'wycats']);
}, 1000);
})
// all的方法为两者promised都为reslove,才执行then的内容
// 但是如果其中一个promise的返回结果为reject,执行catch里的内容
Promise.all([moviePromise, usersPromise]).then(resposes => {
console.log(resposes);
// resposes为一个为对象,一个为数组
}).catch(error => {
console.error(error);
});
// race方法执行的结果由第一个promise的结果来决定的,
// 遇到reject就直接执行catch,遇到resolve就直接执行then
Promise.race([moviePromise, usersPromise]).then(resole => {
// 如果 moviePromise 返回的是reject内容,usersPromise为resolve
// 返回的resole为一个数组。因为先执行为usersPromise
// 如果 usersPromise 返回的是reject内容,usersPromise返回是第一个,注意执行毫秒。
//moviePromise 为resolve
// 应该执行catch的内容
console.log(resole);
}).catch(error => {
console.error(error);
})
</script>