黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程
诺坎普的空气沉重得像一块浸透汗水的毛巾,九万双眼睛聚焦在禁区线上那个瘦削的18岁身影,当主裁判的手指不容置疑地指向十二码点时,拉明·亚马尔深吸一口气,胸腔里翻滚的不只是氧气,还有一种叫作“承诺”的东西——他即将向整座球场、向全世界的巴萨球迷许下一个无声的 Promise:这球,我一定会进。
在编程的世界里,Promise 代表一个尚未完成、但将来会给出结果的操作,而站在点球点后的亚马尔,本身就是一段正在执行的异步代码,助跑、摆腿、触球——这个过程会返回两种结局:兑现(resolve),或者,拒绝(reject),年轻的边锋眼神异常坚定,可足球场上的命运从不遵循任何语法规则,他脚内侧推出的皮球像一道被篡改的返回值,呼啸着偏离了轨道,狠狠砸在广告牌上,那一瞬间,他亲手调用了 reject(),把失望、指责和破碎的期望打包成一个沉重的“拒绝原因”,抛给了所有等待的人。
这就是 reject promise 的本质:当承诺无法被履行时,你要明确告诉世界“我失败了”,并且交出一个理由,就像亚马尔这一脚,拒绝的理由不是一句苍白的“没进”,而是包含草皮弹性、触球角度、心率飙升至180时肌肉微颤的完整错误对象,如果写成代码,球场上的这一刻可以被凝固为:
const yamalPenalty = new Promise((resolve, reject) => {
const shot = takePenalty(); // 执行点球动作
if (shot.isGoal) {
resolve('Goal! 巴萨领先!');
} else {
reject(new Error('射失点球:皮球偏出右门柱,角度偏了7度。'));
}
});
当 `reject` 被触发,`yamalPenalty` 这个承诺的状态就永久地凝固为“已拒绝”(rejected),再也无法回头,看台上响起的不是欢呼,而是几万人同时倒吸一口气后压抑的叹息,这叹息像极了控制台里未捕获的错误——程序正在失控,情绪正在崩溃,更致命的是,如果没有任何人接住这个拒绝,整座“应用程序”就会陷入瘫痪:队友掩面,教练把战术板摔在地上,整个欧冠征程开始报出 Unhandled Promise Rejection。
好在这里是巴萨,这里永远有一群懂得如何用 `.catch()` 兜底的人,当亚马尔低着头走向中圈,特尔施特根在后场用力拍响手掌,那声音就像在代码里写下了第一个错误处理回调,佩德里跑过来揉了揉他的头发,京多安已经准备就地反抢,哈维在场边大声嘶吼着重新布置阵型,他们都在做同一件事——接管那个被拒绝的承诺,执行优雅的失败降级:
```javascript
yamalPenalty
.then(result => {
// 庆祝的舞蹈
celebrate(result);
})
.catch(error => {
// 所有人即刻化身为异常处理机制
console.error('点球失败记录:', error.message);
regainPossession(); // 原地反抢,夺回球权
resetTactics(); // 切换至B计划
boostMorale('Yamal'); // 用行动告诉他:我们相信你下一次
})
.finally(() => {
// 无论成败,比赛继续,呼吸继续
keepFighting();
});
.catch() 就是那只看不见的大手,在皮球偏出的0.3秒后立刻托住了整支球队的心理防线,把一次毁灭性的 reject 转化为可控的错误状态,而如果你连 .catch() 都没写,就等于任由失望在更衣室里发酵,最终导致整个赛季的“进程崩溃”。
还有一种更加直接的拒绝方式,叫做 Promise.reject(),就像教练在战术板上直接画下一个巨大的叉——不用等待,立即返回一个已拒绝的承诺,当第四官员举起补时牌,你明知时间不够,却还需要一个奇迹时,你可以直接写下:
const miracleNeeded = Promise.reject(new Error('常规时间已耗尽,需要超常发挥。'));
这个静态方法常用于测试或者提前终止逻辑,但放在足球场上,它就是那种绝望的长传冲吊——明知成功率不足5%,却依然要把它踢向禁区,让拒绝的结果先飞一会儿,让 .catch() 里的人仰马翻去解答命运。
真正的用法不止于此。reject 的原因可以是任何数据类型,但永远应该是一个 Error 对象,就像射失点球的“原因”绝不只是“球没进”,而是完整的身体语言、技术变形和心理负荷,当亚马尔再次抬起头,他的瞳孔里映出下一次进攻的火光,他知道,拒绝一个承诺并不可怕,真正可怕的是没有 .catch() 的代码,和没有人接应的人生。
诺坎普的夜空下,被拒绝的那个 Promise 已经随着裁判的哨声封存在时间线里,而新的 Promise 正在佩德里脚下重新构建,状态为 pending,眼神里写着:下一次,我会亲手 resolve。

