# Promise

# 使用

// 每次调用 Promise 的方法后,会返回 Promise 对象,可以链式调用
var promise = new Promise((resolve, reject) => {
  // 模拟耗时操作
  setTimeout(() => {
    resolve("1 执行成功,返回结果");
  }, 2000);
})
  .then(res => {
    console.log(res); // 1 执行成功,返回结果
    // 也可返回对 res 操作后的值
    return "2 执行成功,返回结果";
  })
  .then(res => {
    console.log(res); // 2 执行成功,返回结果
    return new Promise((resolve, reject) => {
      resolve("3 执行成功,返回结果");
    });
  })
  .then(res => {
    console.log(res); // 3 执行成功,返回结果
    throw new Error("1 执行失败,返回失败信息");
  })
  .catch(error => {
    console.log(error); // Error: 执行失败,返回失败信息
    throw "2 执行失败,返回失败信息";
  });
// 后面哈可以继续 then、catch

# 多个 Promise 同时执行

var p1 = new Promise(resolve => {
  setTimeout(() => {
    console.log("p1");
    resolve(1);
  }, 1000);
});

var p2 = new Promise(resolve => {
  setTimeout(() => {
    console.log("p2");
    resolve(2);
  }, 2000);
});

var p3 = new Promise(resolve => {
  setTimeout(() => {
    console.log("p3");
    resolve(3);
  }, 500);
});

Promise.all([p1, p2, p3]).then(values => {
  let [v1, v2, v3] = values;
  console.log(v1, v2, v3); // 1 2 3
});

// 最终返回:
// p3
// p1
// p2
// 1 2 3