javascript - Firebase 函数未向客户端应用返回响应
问题描述
在 firebase 中运行可调用函数。在 Firebase 模拟器中本地运行它。我返回一个简单的字符串只是为了看看我是否可以将它返回给客户端,但我在响应中得到的只是{"data": null}
. 我不完全确定这里的问题是什么。我敢肯定,我对 Promise 有一些不理解的地方,如果您通过另一个问题帮助我完成了该项目的另一部分,我将不胜感激。仍在尝试了解所有这些是如何工作的。这是功能:
exports.createAssetMux = functions.https.onCall((data, context) => {
console.log('data: ', data)
admin.firestore().collection('users').doc(data.id).update({
streamID: '98273498237'
}).then(() => {
console.log('update success')
return {data: 'update successful'}
}).catch(error => {
console.log('error message: ', error)
return {data: 'there was an issue updating document'}
});
});
此时只是试图将数据返回给客户端。我在尝试解决的 Firebase 功能方面遇到了一些其他问题,所有这些都是相互关联的,只是不想让另一个帖子过于复杂。任何帮助都会很棒!提前致谢!
解决方案
return 语句没有按照您的预期进行。它们只是从您传递给then
and的 lambda 函数返回一个值catch
。它们不会从您传递给的较大函数返回值onCall
。
可调用函数要求您返回一个与您要发送给客户端的对象一起解析的承诺。现在,传递给的函数onCall
总是什么都不返回。您需要做的是返回整个承诺链:
return admin.firestore().collection('users').doc(data.id).update({
streamID: '98273498237'
}).then(() => {
console.log('update success')
return {data: 'update successful'}
}).catch(error => {
console.log('error message: ', error)
return {data: 'there was an issue updating document'}
});
我添加的只是第一行开头的返回。
了解 JavaScript Promise 的工作原理对于编写有效的函数至关重要。我强烈建议花一些时间来学习他们通常的模式。
推荐阅读
- java - 访问 jasypt 的 FixedStringSaltGenerator 和 setSaltGenerator 生成的 SALT?
- ember.js - 为 ember api 操作自定义适配器
- pipeline - 使用 Luigi 运行具有不同参数和动态依赖关系的相同任务
- javascript - TypeScript:TypeError:App 不是构造函数
- botframework - CardAction DisplayText 似乎不起作用
- corda - 将新节点添加到现有的 Corda 网络
- python - 将标准错误重定向到日志,要添加时间戳
- tensorflow - Tensorflow 图获取范围内的所有常量
- javascript - 弹出框 javascript+PHP 代码混合不起作用?
- python - 在 Python 中使用重复旋转多个列