如何在具有嵌套条件的Firebase云函数中满足返回promise的要求



我编写了一个Firebase云函数(如下(,它需要向调用方返回promise。如果函数不满足某个条件,它是否必须返回nullPromise.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如何工作的教程。此外,最好从一个更简单的函数开始,它的操作完全符合您的预期(没有不确定性(,然后逐渐使其变得更复杂。

相关内容

  • 没有找到相关文章

最新更新