Возвращение обещания в облачной функции - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь наблюдать за любыми записями с заданной ссылкой и удалять их после заданной задержки (в данном случае 5 секунд). Когда я развертываю следующую облачную функцию, функция мгновенно возвращается (в течение 1 секунды), как только я добавляю новый узел к ссылке, но все журналы консоли печатаются в правильном порядке.

exports.monitorActiveSignals = functions.database.ref('/names/{pushId}')
    .onCreate((snapshot, context) => {
         const key = snapshot.key;
         console.log(key);
         return wait(5000, snapshot).then((snap) => {
         console.log("timer done")
         snap.ref.remove();
         return;
   })
 })

const wait = (time, snap) => new Promise((resolve) => {
console.log(time)
console.log("timer started");
setTimeout(resolve(snap), time);
});

1 Ответ

0 голосов
/ 26 июня 2018

Когда вы говорите setInterval(resolve(snap), time), вы вызываете метод разрешения до , когда запускается таймер. Тогда ничего не происходит после срабатывания таймера, потому что resolve(snap) ничего не возвращает - нет функции для выполнения. Почему бы вам не попробовать нечто подобное вместо этого, чтобы фактически отложить выполнение resolve() до срабатывания таймера:

exports.monitorActiveSignals = functions.database.ref('/names/{pushId}')
.onCreate((snapshot, context) => {
    const key = snapshot.key;
    console.log(key);
    return wait(5000, snapshot).then((snap) => {
        console.log("timer done")
        snapshot.ref.remove();
        return;
    })
})

const wait = (time, snap) => new Promise((resolve) => {
    console.log(time)
    console.log("timer started");
    setTimeout(resolve, time);
});
...