Firebase 在云函数中返回承诺

Firebase 在云函数中返回承诺,firebase,promise,google-cloud-functions,Firebase,Promise,Google Cloud Functions,我试图在给定的ref上观察任何写入操作,并在给定的时间延迟(在本例中为5秒)后删除相同的操作。当我部署下面的云函数时,一旦我向ref添加了一个新节点,该函数立即返回(在1秒之内),但所有控制台日志都以正确的顺序打印 exports.monitorActiveSignals = functions.database.ref('/names/{pushId}') .onCreate((snapshot, context) => { const key = snapsh

我试图在给定的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);
});

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

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

你不是想用setTimeout吗?setInterval会随着时间的推移反复触发,我相信您不希望出现这种情况。您不是想使用setTimeout吗?setInterval会随着时间的推移反复触发,我相信您不希望出现这种情况。