【问题标题】:Firebase cloud functions database trigger is not run correctly sometimeFirebase 云函数数据库触发器有时无法正确运行
【发布时间】:2020-04-11 23:32:29
【问题描述】:

我编写了以下运行良好的代码。但是最近我发现触发器有时不会更新内部值。我的代码有什么问题吗?我在下面附上了日志和代码。

日志:请求 0411193257728 的内部标志在 30 秒后未更新。

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

【问题讨论】:

    标签: typescript firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    set() 是异步的并返回一个承诺。由于您使用的是 async/await 语法,因此您应该使用它来确保函数等待直到写入完成。如果您不希望 Promise 得到解决,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);
        }
    })    
    

    实际上,您甚至不应该尝试捕获错误 - 如果写入因某些原因而失败,只需让函数错误出来。

    【讨论】:

    • 感谢您的 cmets。我喜欢你的广播视频。我
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 2018-09-14
    • 2019-07-14
    • 2021-02-13
    • 1970-01-01
    • 2023-03-14
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多