📜  JavaScript | Promise.all() 方法(1)

📅  最后修改于: 2023-12-03 14:42:28.385000             🧑  作者: Mango

JavaScript | Promise.all() 方法

在JavaScript开发中,Promise.all()方法是一个很常用的方法,它可以将所有Promise对象封装成一个新的Promise对象,等待所有Promise对象都完成后,再将他们的结果按原顺序传递给then()方法。

1. 语法
Promise.all([promise1, promise2, promise3]);
2. 使用
2.1. Promise.all()方法的返回值

Promise.all()方法返回一个新的Promise对象。在传入的所有Promise对象都完成后,返回的Promise对象将得到传入所有Promise对象的结果,传入的Promise对象的结果顺序与传入时的顺序保持一致。

Promise.all([
  Promise.resolve('foo'),
  Promise.resolve('bar'),
]).then(([result1, result2]) => {
  console.log(result1, result2);
  // expected output: "foo" "bar"
});
2.2. Promise.all()方法的错误处理

在传入的Promise对象中,若有任何一个出现rejected状态,Promise.all()将会立即拒绝并将当前rejected状态的Promise对象的rejection值传递给它的catch()方法。

Promise.all([
  Promise.resolve('foo'),
  Promise.reject(new Error('bar')),
  Promise.resolve('baz'),
]).catch(err => {
  console.log(err.message);
  // expected output: "bar"
});
2.3. Promise.all()方法的使用案例

在实际开发中,Promise.all()方法常用于处理异步操作,例如发起多个请求或执行多个数据库查询,等待这些异步操作全部完成后,再将结果返回给页面或进行后续操作。

const fetchData = async (url) => {
  const response = await fetch(url);
  return response.json();
};

Promise.all([
  fetchData('/api/users'),
  fetchData('/api/posts'),
]).then(([users, posts]) => {
  console.log(users, posts);
  // expected output: 返回API请求返回的JSON数据
});
3. 小结

Promise.all()方法可以很方便地处理多个异步操作,等待它们全部完成后,将结果按传入顺序传递给then()方法。然而,如果其中一个Promise对象出现rejected状态,Promise.all()就会立即拒绝并向其上层传递该Promise对象的rejection值。