首页 > 解决方案 > 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 功能方面遇到了一些其他问题,所有这些都是相互关联的,只是不想让另一个帖子过于复杂。任何帮助都会很棒!提前致谢!

标签: javascriptfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


return 语句没有按照您的预期进行。它们只是从您传递给thenand的 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 的工作原理对于编写有效的函数至关重要。我强烈建议花一些时间来学习他们通常的模式。


推荐阅读