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
相关产品推荐
相关产品推荐

