我编写了一个Firebase云函数(如下(,它需要向调用方返回promise。如果函数不满足某个条件,它是否必须返回null
或Promise.reject()
,或者其他什么?下面的函数(从移动应用程序调用(执行Firestore读取,并根据读取中的值发送FCM消息。
export const pushNotifyConnection = functions.https.onCall((data, _context) => {
const recipientUserId = data.recipientUserId
admin.firestore().collection("userSettings").doc(recipientUserId).get().then((snapshot) => {
if (snapshot.exists) {
const allowsConnectionNotifications = snapshot.get("private.connectionNotifications") || false
if (allowsConnectionNotifications) {
const fcmToken = snapshot.get("private.fcmToken")
const message = {
...
}
return admin.messaging().send(message)
} else {
return null // am I required to return this, Promise.reject(), or something else?
}
} else {
return null // am I required to return this?
}
}).catch((error) => {
return error // can I just return the error?
})
})
此函数是否满足始终返回正确终止函数的承诺的要求?
不,它不是。此函数不从顶级函数范围返回任何内容。
最起码,您应该返回由admin.firestore().collection(...)
启动的承诺链。最理想的情况是,最里面的返回包含要发送到客户端的对象。admin.messaging().send(message)
返回的数据可能不是您实际希望客户端接收的数据。
为了正确地做到这一点,我强烈建议找一些关于promise如何工作的教程。此外,最好从一个更简单的函数开始,它的操作完全符合您的预期(没有不确定性(,然后逐渐使其变得更复杂。