You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Promise的then回调是否按参数顺序区分成功/失败处理函数?

问题解答


1. Promise识别回调触发场景的逻辑&是否按传入顺序区分

是,完全按照传入then方法的参数位置来区分对应场景,这是ECMAScript标准中明确规定的Promise.prototype.then的固定接口:

  • 第一个位置的参数是onFulfilled回调,只会在Promise状态变为成功(fulfilled)时被触发
  • 第二个位置的参数是onRejected回调,只会在Promise状态变为失败(rejected)时被触发

Promise内部完全不会读取你定义的回调函数的形参名、也不会根据你是否定义形参来判断触发逻辑,只和你传入参数的先后顺序有关。

2. 移除成功回调的value参数是否安全

完全安全,没有任何副作用。
Promise触发成功回调时,确实会把成功结果作为第一个参数传入回调函数,但这个参数是给你按需使用的,如果你不需要用到这个结果,完全可以不定义形参,不会影响回调的触发,也不会抛出任何错误。


可选优化提示

你当前的云函数代码没有把Promise返回给云函数运行时,可能会出现云函数提前被系统回收、导致更新操作未执行完成的问题,建议调整为返回Promise的写法:

exports.userDidSignOut = functions.https.onCall((data) => {
    const userId = data.userId;
    const settingsUpdate = {
        "fcmToken": null,
    };
    // 直接返回Promise即可保证异步操作执行完成
    return admin.firestore().collection("user-settings").doc(userId).update(settingsUpdate)
        .then(() => null)
        .catch((reason) => console.log(reason));
});

内容的提问来源于stack exchange,提问作者lurning too koad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:45:08