Promise(承诺)是对未来值的"欠条" (IOU)。它通过扁平化嵌套代码来防止可怕的"回调地狱"。
使用 Promise
模拟抛硬币的网络请求。
javascript
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分钟。
javascript
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}`);
});