【发布时间】:2018-05-16 04:55:26
【问题描述】:
我的代码如下所示:
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);
});
我相信这个实现遵循developer guide,通过链接所有异步操作并返回一个承诺。但是,问题在于这种方法,我不想等待那些 someFunctionReturningAPromise(..) 函数完成(主要是因为它们花费的时间太长,而且我有一个用户要在前端的流程中返回)。我宁愿在他们的路上发送这些函数来做他们的事情并返回一个已解决的承诺。
所以我会这样做:
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 实例会关闭我的“流氓”功能。我不知道我是否可以保证 doWork() 函数将被允许运行,根据 Firebase:
通过正确终止函数...可以确保云 运行您的函数的函数实例之前不会关闭 您的函数成功地达到其终止条件或状态。
在 Firebase 云上运行此类独立功能的正确方法是什么?我应该将doWork() 包装在单独的HTTP function 中吗?
【问题讨论】:
标签: node.js firebase firebase-realtime-database google-cloud-functions