Promise.race方法
Promise.race
方法接收一个Promise对象数组,并返回一个新的Promise对象。当传入的Promise对象数组中的任何一个对象完成时,新的Promise对象将被标记为已完成,并将完成的结果作为其结果值;如果其中任何一个Promise对象被标记为失败,则新的Promise对象将被标记为失败,并将失败的原因作为其结果。
语法
代码语言:javascript复制Promise.race(iterable);
其中,iterable
表示一个可迭代的对象,通常是一个Promise对象数组。
示例代码
下面是一个示例代码,演示了Promise.race
方法的使用:
function performAsyncTask(value, delay) {
return new Promise(resolve => {
setTimeout(() => {
resolve(value);
}, delay);
});
}
const promise1 = performAsyncTask('Task 1', 2000);
const promise2 = performAsyncTask('Task 2', 3000);
const promise3 = performAsyncTask('Task 3', 1000);
const promises = [promise1, promise2, promise3];
Promise.race(promises)
.then(result => {
console.log('Result:', result); // 输出最先完成的结果
})
.catch(error => {
console.error('Error:', error); // 输出失败的原因
});
在上述示例中,我们定义了一个performAsyncTask
函数,它返回一个Promise对象,用于模拟异步操作。我们创建了三个不同的Promise对象,并将它们存储在promises
数组中。
然后,我们调用Promise.race
方法,并将promises
数组作为参数传递给它。通过.then()
方法,我们可以获取到最先完成的Promise对象的结果,并输出结果;通过.catch()
方法,我们可以捕获任何一个Promise对象失败的情况,并输出失败的原因。
Promise.race方法的特点
Promise.race
方法具有以下特点:
- 如果传入的可迭代对象中有任何一个元素不是Promise对象,则会将其视为已完成的Promise对象,并将其值包装在一个新的Promise对象中。
- 当传入的Promise对象中的任何一个对象完成时,新的Promise对象将被标记为已完成,并将完成的结果作为其结果值。
- 如果其中任何一个Promise对象被标记为失败,则新的Promise对象将被标记为失败,并将失败的原因作为其结果。
下面是一些示例代码,展示了Promise.race
方法的不同用法:
// 示例1: 最先完成的Promise对象成功
const promise1 = new Promise(resolve => {
setTimeout(() => {
resolve('Result 1');
}, 2000);
});
const promise2 = new Promise(resolve => {
setTimeout(() => {
resolve('Result 2');
}, 3000);
});
const promise3 = new Promise(resolve => {
setTimeout(() => {
resolve('Result 3');
}, 1000);
});
Promise.race([promise1, promise2, promise3])
.then(result => {
console.log(result); // 输出: Result 3
});
// 示例2: 最先完成的Promise对象失败
const promise4 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Error 4'));
}, 2000);
});
const promise5 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Error 5'));
}, 3000);
});
const promise6 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Error 6'));
}, 1000);
});
Promise.race([promise4, promise5, promise6])
.then(result => {
console.log(result); // 不会执行到这里
})
.catch(error => {
console.error(error); // 输出: Error: Error 6
});
在上述示例中,我们展示了不同方式使用Promise.race
方法组合Promise对象并处理结果的方法。