【问题标题】:Returning a Promise in a Cloud Function在云函数中返回 Promise
【发布时间】:2018-12-05 13:47:54
【问题描述】:

我正在尝试观察给定 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);
});

【问题讨论】:

  • 你不是说要使用setTimeout吗? setInterval 会随着时间的推移重复触发,我敢肯定你不想在这里。

标签: firebase promise google-cloud-functions


【解决方案1】:

当您说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);
});

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2021-05-31
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2019-12-14
    • 2023-03-11
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多