前端面试:promise.all
时间: 2024-03-16 10:38:47 浏览: 26
在前端面试中,Promise.all() 是一个常见的问题。它是一个用于处理多个 Promise 对象的方法,返回一个新的 Promise 对象。根据引用所述,Promise.all() 方法接收一个 promise 的 iterable 类型的输入(例如数组),并且只返回一个 Promise 实例。当所有输入的 promise 都成功执行时,Promise.all() 返回的 Promise 对象的 resolve 回调会传递一个包含所有 promise 结果的数组。如果输入的 promise 中有任何一个失败或者输入不合法的 promise,Promise.all() 返回的 Promise 对象的 reject 回调会立即抛出错误,并且 reject 的是第一个抛出的错误信息[^2]。
以下是一个示例,演示了如何使用 Promise.all() 方法:
```javascript
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log(values); // 输出:[3, 42, 'foo']
})
.catch(error => {
console.error(error); // 如果有任何一个 promise 失败,会立即抛出错误
});
```
在上面的示例中,我们创建了三个 Promise 对象:promise1、promise2 和 promise3。promise1 是一个已经解决的 Promise,promise2 是一个普通的值,promise3 是一个在 100 毫秒后解决的 Promise。我们将这三个 Promise 对象作为参数传递给 Promise.all() 方法。当所有的 Promise 都成功执行时,Promise.all() 返回的 Promise 对象的 resolve 回调会传递一个包含所有 promise 结果的数组。在这个示例中,我们通过 then() 方法获取到了这个数组,并将其打印出来。如果有任何一个 Promise 失败,Promise.all() 返回的 Promise 对象的 reject 回调会立即抛出错误,并且 reject 的是第一个抛出的错误信息。