Firebase云异步错误(函数返回未定义,预期的承诺或值)

时间:2019-03-05 05:47:34

标签: javascript firebase firebase-realtime-database google-cloud-functions async.js

首先,感谢您抽出宝贵的时间阅读本文。

我一直在为Firebase应用程序开发云功能,并且遇到了一些令人沮丧的情况。一半时间,我的功能正常工作;我看到了所有预期的日志,并且数据库已正确更新。另一半时间,该功能似乎在中途停止;仅出现一些日志,并且仅完成了一半的预期数据库更新。我已经调试了很长一段时间,但想法不多了。

我一直在日志中看到的一件事是以下错误:

Function returned undefined, expected Promise or value

我不确定这个错误是否是导致上述不一致的原因,但这是我目前唯一的线索。此时,我已经注释掉了我的云函数中的几乎所有代码,并且该错误似乎是由于使用async.auto函数引起的。一旦删除对async的任何引用,该错误就会消失。

总结我的问题: 1-为什么使用async.auto会导致上述错误? 2-该错误是否是与运行云功能的结果不一致的原因?

作为参考,这是我现在过度简化且毫无意义的函数,它会引发上述错误:

exports.updateLeaderboard = functions.database.ref('/contests/{dateString}/ladder/dayIsComplete').onWrite((event, context) => {
    const isComplete = event.after._data,
        contestType = 'ladder',
        dateString = context.params.dateString;

    if (isComplete !== true) {
        console.warn(`${contestType} for ${dateString} is not yet complete.`);

        return false;
    }

    async.auto({
        fetchWinningPicks: cb => {
            return cb();
        },

        // ... Other stuff that I've now commented out

    }, err => {
        if (err) {
            return false;
        } else {
            return true;
        }
    });
};

1 个答案:

答案 0 :(得分:0)

我能够通过将a_c = np.copy(a) a_c[:,0,None] = a[:,0,None] - b 流包裹在async.auto中并解决/拒绝最终的回调中来解决该错误:

new Promise()

这似乎可以解决我上面的两个问题。