在云函数中返回承诺
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在云函数中返回承诺相关的知识,希望对你有一定的参考价值。
我正在尝试观察给定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);
});
以上是关于在云函数中返回承诺的主要内容,如果未能解决你的问题,请参考以下文章