Node.js 在不等待Firebase云函数返回的情况下启动函数的正确方法

Node.js 在不等待Firebase云函数返回的情况下启动函数的正确方法,node.js,firebase,firebase-realtime-database,google-cloud-functions,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,我的代码如下所示: exports.onRecordCreated = functions.database.ref('/' + postsFireRealtimeRef + '/{someId}') .onCreate((snap, context) => { return someFunctionReturningAPromise(someParameter); }).then(someParameter => { return s

我的代码如下所示:

exports.onRecordCreated = functions.database.ref('/' + postsFireRealtimeRef + '/{someId}')
    .onCreate((snap, context) => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    });
我相信这个实现是通过链接所有异步操作并返回一个承诺来实现的。然而,这种方法的问题在于,我不想等待那些
somefunctionreturningagreement(…)
函数完成(主要是因为它们花费的时间太长,而且我在前端的流中有一个用户要返回)。我更愿意将这些函数发送到它们完成任务的途中,并返回一个已解决的承诺

所以我会这样做:

exports.onRecordCreated = functions.database.ref('/' + postsFireRealtimeRef + '/{someId}')
    .onCreate((snap, context) => {
        doWork();
        return true  // Tell front end that the server was reached ok with the record being created, but don't wait for all asynchronous operations to complete
    });

function doWork() {
    return someFunctionReturningAPromise(someParameter)
        .then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        }).then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        }).then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        });
}
使用此解决方案我担心Firebase实例会关闭我的“rogue”功能。我不知道我是否能保证
doWork()
函数可以运行,正如Firebase所说:

通过正确终止函数。。。可以确保云 函数实例运行您的函数之前不会关闭 您的函数已成功达到其终止条件或状态


在Firebase云端运行这些独立功能的正确方法是什么?我是否要将
doWork()
单独包装?

如果您的函数返回时没有等待其所有承诺完成,则很有可能在它们完成之前全部关闭


如果需要更多时间来执行函数中的工作,请在项目中增加其超时时间。如果您需要9分钟以上的时间,您应该将工作分开,并使用pub/sub触发器将其启动。

如果您的函数返回时没有等待其所有承诺完成,则很有可能在它们完成之前将其全部关闭


如果需要更多时间来执行函数中的工作,请在项目中增加其超时时间。如果您需要9分钟以上的时间,您应该分割工作并使用pub/sub触发器启动它们。

我的理解是,
res.send()
将在不停止脚本执行的情况下立即发送HTTP响应。此脚本的执行仅取决于函数的超时配置值


无论如何,您不应该发送多个HTTP响应,因此,如果您在脚本结束之前发送响应,则需要实现一些其他方法来报告失败。例如通知。

我的理解是,
res.send()
将在不停止脚本执行的情况下立即发送HTTP响应。此脚本的执行仅取决于函数的超时配置值

无论如何,您不应该发送多个HTTP响应,因此,如果您在脚本结束之前发送响应,则需要实现一些其他方法来报告失败。例如,通知