Promise.all()
方法接收一个 Promise
对象数组作为参数,返回一个新的 Promise
对象。该 Promise
对象在所有的 Promise
对象都成功时才会成功,其中一个 Promise
对象失败时,则该 Promise
对象立即失败。
本篇博客将手写实现 Promise.all()
方法。
实现思路
实现 Promise.all()
方法的关键在于:
- 在所有的
Promise
对象都成功时,返回一个包含所有Promise
结果的数组。 - 如果有一个
Promise
对象失败,则立即返回失败原因。
基于这个思路,我们可以通过以下步骤来手写实现 Promise.all()
方法:
- 传入一个
Promise
对象数组。 - 返回一个新的
Promise
对象。 - 创建一个空数组,用于存储每个
Promise
对象的结果。 - 遍历
Promise
对象数组,对于每个Promise
对象,将它的结果添加到结果数组中。 - 如果有一个
Promise
对象失败,则将返回的Promise
对象立即拒绝,并返回失败原因。 - 如果所有的
Promise
对象都成功,则返回包含所有结果的数组的Promise
对象。
代码实现
Promise.all = function (promises) {
let results = [];
let length = promises.length;
let promiseCount = 0;
return new Promise((resolve, reject) => {
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i]).then(res => {
results[i] = res;
promiseCount++;
if (promiseCount === length) {
resolve(results);
}
}, err => {
reject(err);
})
}
})
}
使用示例
以下是使用手写的 Promise.all()
方法的示例:
let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);
let promise3 = Promise.resolve(3);
promise.all([promise1, promise2, promise3])
.then(results => {
console.log(results); // [1, 2, 3]
})
.catch(reason => {
console.log(reason);
});
总结
在本篇博客中,我们手写实现了 Promise.all()
方法,实现了该方法的核心思想,并提供了使用示例。手写实现一些核心的 JavaScript
方法可以帮助我们更好地理解这些方法的原理和工作方式,同时也可以提高我们的编程技能和代码能力。