Skip to content

【Promise第26题】下面代码的输出是什么?

Posted on:2022年1月9日 at 23:14
function runAsync(x) {
  const p = new Promise((r) => setTimeout(() => r(x, console.log(x)), 1000));
  return p;
}
function runReject(x) {
  const p = new Promise((res, rej) =>
    setTimeout(() => rej(`Error: ${x}`, console.log(x)), 1000 * x),
  );
  return p;
}
Promise.all([runAsync(1), runReject(4), runAsync(3), runReject(2)])
  .then((res) => console.log(res))
  .catch((err) => console.log(err));

解析

.catch是会捕获最先的那个异常,在这道题目中最先的异常就是runReject(2)的结果。

结果

// 1s后输出
1
3
// 2s后输出
2
Error: 2
// 4s后输出
4
原文转自:https://fe.ecool.fun/topic/613e333e-ffca-45ff-a13a-debd8053d913