const setDelay = (millisecond) => {
  return new Promise((resolve, reject) => {
    if (typeof millisecond != "number")
      reject(new Error("参数必须是number类型"));
    setTimeout(() => {
      resolve(`我延迟了${millisecond}毫秒后输出的`);
    }, millisecond);
  });
};
const setDelaySecond = (seconds) => {
  return new Promise((resolve, reject) => {
    if (typeof seconds != "number" || seconds > 10)
      reject(new Error("参数必须是number类型,并且小于等于10"));
    setTimeout(() => {
      resolve(`我延迟了${seconds}秒后输出的,注意单位是秒`);
    }, seconds * 1000);
  });
};

// Promise chains
setDelay(1000)
  .then((result) => {
    console.log(result);
    return setDelaySecond(2);
  })
  .then((result) => {
    console.log(result);
    return setDelay(1000);
  })
  .then((result) => {
    console.log(result);
    console.log("完成");
  })
  .catch((err) => {
    console.log(err);
  });
// async/await
(async () => {
  const result = await setDelay(1000);
  console.log(result);
  console.log(await setDelaySecond(2));
  console.log(await setDelay(1000));
  console.log("完成了");
})();

await 是个运算符,用于组成表达式,await 表达式的运算结果取决于它等的东西。

如果等到的不是个 Promise 对象,那么 await 表达式的运算结果就等于它等到的东西。

如果等到的是个 Promise 对象,那么 await 就会阻塞后面的代码,等着 Promise 对象的 resolved 状态,然后得到 resolve 的值,作为 await 表达式的运算结果。

Links to this note