Триггер базы данных облачных функций Firebase иногда запускается некорректно - PullRequest
0 голосов
/ 11 апреля 2020

Я написал следующий код, который работает хорошо. Но недавно я обнаружил, что триггер иногда не обновляет внутреннее значение. Что-то не так в моем коде? Я приложил журналы и коды в следующем.

Журнал: внутренний флаг запроса 0411193257728 не обновляется после 30 se c.

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

1 Ответ

0 голосов
/ 11 апреля 2020

set() является асинхронным и возвращает обещание. Поскольку вы используете синтаксис async / await, вы должны использовать его, чтобы убедиться, что функция ожидает завершения записи. Если вы не хотите, чтобы обещание было выполнено, облачные функции могли бы прекратить и очистить asyn c работу до ее завершения.

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

На самом деле, вам, вероятно, даже не следует пытаться перехватить ошибку - просто выпустите ошибку функции, если запись не удалась для какого-либо rason.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...