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

问题描述 投票:1回答:1

首先,提前感谢您花时间阅读本文。

我一直在为我的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;
        }
    });
};
javascript firebase firebase-realtime-database google-cloud-functions async.js
1个回答
0
投票

我能够通过在async.auto中包装我的new Promise()流并在我的最终回调中解析/拒绝来解决错误:

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;
    }

    return new Promise((resolve, reject) => {
        async.auto({
            fetchWinningPicks: cb => {
                return cb();
            },

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

        }, err => {
            if (err) {
                reject();
            } else {
                resolve();
            }
        });
    });
};

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

© www.soinside.com 2019 - 2024. All rights reserved.