我写了下面运行良好的代码。但是最近我发现触发器有时不会更新内部值。我的代码有什么问题吗?我在下面附上了日志和代码。
日志:30秒后,请求0411193257728的内部标志未更新。
7:33:01.008 pm
publishRequest
call constructor
7:33:01.777 pm
publishRequest
process the request ref = 0411193257728
7:33:02.096 pm
publishRequest
Function execution took 30038 ms, finished with status: 'ok'
7:33:02.098 pm
publishRequest
request 0411193231315 updated !
7:33:31.786 pm
publishRequest
Function execution took 31465 ms, finished with status: 'ok'
7:36:30.592 pm
publishRequest
Function execution started
7:36:30.603 pm
publishRequest
process the request ref = 0411193630508
7:37:00.607 pm
publishRequest
Function execution took 30016 ms, finished with status: 'ok'
7:37:02.295 pm
publishRequest
request 0411193630508 updated !
码
exports.publishRequest= functions.database.ref("Request/{requestID}")
.onCreate( async (snap, context) =>{
console.log("process the request ref = " + context.params.requestID);
await sleep(30000);
snap.ref.child("internal").set(false)
.then((value) =>{ console.log("request " + context.params.requestID + " updated !")} )
.catch((error) => console.error(error));
return;
})
set()
是异步的并返回一个承诺。由于您使用的是async / await语法,因此应使用该语法来确保函数等待直到写入完成。如果您不希望兑现承诺,则Cloud Functions可能会终止并清理异步工作,然后再完成。
exports.publishRequest = functions.database.ref("Request/{requestID}")
.onCreate( async (snap, context) =>{
console.log("process the request ref = " + context.params.requestID);
await sleep(30000);
try {
await snap.ref.child("internal").set(false)
console.log("request " + context.params.requestID + " updated !");
}
catch (error) {
console.error(error);
}
})
实际上,您甚至不应该尝试捕获错误-如果写入由于某些原因而失败,则只需释放该函数错误即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句