概念
The Promise.race(iterable) method returns a promise that resolves or rejects as soon as one of the promises in the iterable resolves or rejects, with the value or reason from that promise.
意思是Promise.race會返回參數(shù)中第一個執(zhí)行完畢的promise的結(jié)果(無論是已完成還是已拒絕)
《深入理解ES6》中的錯誤
源代碼
let p1 = new Promise(function(resolve, reject) {
resolve(42);
});
let p2 = Promise.reject(43);
let p3 = new Promise(function(resolve, reject){
resolve(44);
});
let p4 = Promise.race([p1, p2, p3]);
p4.catch(function(value) {
console.log(value); // 43
});
書中概念講的是對的适肠。
但是關(guān)于這段代碼的描述有問題钳垮,作者認(rèn)為執(zhí)行結(jié)果應(yīng)該是p2的已拒絕, 打印43涉兽。
但是其實執(zhí)行的是p1的已解決眶熬,所以不會打印任何值,如果改成p4.then抠刺,則會打印42岩四。
p4.then(function(value) {
console.log(value); // 42
});
所以一般寫法是then和catch都要處理
p4.then(function(value) {
console.log(value); // 42
}).catch(function(value) {
console.log(value);
});