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响应,因此,如果您在脚本结束之前发送响应,则需要实现一些其他方法来报告失败。例如,通知