首页 > 解决方案 > firebase onCall 云函数不返回结果

问题描述

我的可调用函数如下所示:

exports.function = functions.https.onCall((data, context) => {

    let result1, result2;

    async function function1() {
        return 1;
    }

    async function function2() {
        return 2;
    }

    return Promise.all([
        result1 = function1(),
        result2 = function2()
    ])
    .then(() => {
        console.log(result1);
        console.log(result2);
        return {
            result1: result1,
            result2: result2
        }
    }) 
})

我在客户端得到的 result1 和 result2 没有任何值,只有一个名为 domain 的字段。我的云功能有什么问题?

日志输出

Promise {
  1,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } } 

Promise {
  2,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } } 

标签: javascriptnode.jsfirebasegoogle-cloud-functions

解决方案


您正在捕获 and 返回的承诺function1function2并尝试将它们直接发送给客户端。那是行不通的。您将需要在由Promise.all().

    return Promise.all([
        function1(),
        function2()
    ])
    .then((result1, result2) => {
        console.log(result1);
        console.log(result2);
        return {
            result1: result1,
            result2: result2
        }
    }) 

请注意,您甚至不需要在更高的范围内声明 result1 和 result2。


推荐阅读