在云函数中返回承诺

问题描述 投票:1回答:1

我正在尝试观察给定ref的任何写入并在给定的时间延迟后删除它(在这种情况下为5秒)。当我部署以下云功能时,一旦我向ref添加新节点,该函数立即返回(在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);
});
firebase promise google-cloud-functions
1个回答
4
投票

当你说setInterval(resolve(snap), time)时,你正在做的是在计时器启动之前调用resolve方法。然后,在计时器触发后没有任何反应,因为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);
});
© www.soinside.com 2019 - 2024. All rights reserved.