进阶与异步2026年1月29日星期四

Promise 与异步 JS

处理耗时任务。

广告

查看赞助商以支持 JS Fruggal。

Promise(承诺)是对未来值的"欠条" (IOU)。它通过扁平化嵌套代码来防止可怕的"回调地狱"。

使用 Promise

模拟抛硬币的网络请求。

const coinFlip = new Promise((resolve, reject) => {
  setTimeout(() => {
    if (Math.random() > 0.5) resolve("正面!你赢了。");
    else reject("反面!你输了。");
  }, 1000);
});

console.log("抛硬币...");

coinFlip
  .then(result => console.log("成功:", result))
  .catch(err => console.error("失败:", err))
  .finally(() => console.log("游戏结束。"));

高级:并行执行

厨师比喻

如果你需要吐司和咖啡:
顺序: 做吐司(等2分钟)。然后做咖啡(等2分钟)。总共:4分钟。
并行 (Promise.all): 开始做吐司 并 开始做咖啡。等待两者完成。总共:2分钟。

const getToast = new Promise(r => setTimeout(() => r("吐司"), 1000));
const getCoffee = new Promise(r => setTimeout(() => r("咖啡"), 1000));

console.log("开始早餐...");

Promise.all([getToast, getCoffee])
  .then(([food, drink]) => {
    console.log(`早餐已上:${food}${drink}`);
  });
广告

查看赞助商以支持 JS Fruggal。