gpt4 book ai didi

javascript - 如何在 firebase 云函数中使用 javascript setTimeout 函数

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:20 25 4
gpt4 key购买 nike

我正在尝试为 firebase 创建一个云函数,它根据延迟值删除用户并在延迟数之后插入。

exports.delayqueue = functions.database.ref('/queues/{queueid}/members/{memberid}').onWrite(event => {

var members = event.data.ref.parent;
var user = event.data;
var queueid = members.parent;
var userid = event.params.memberid;
var delayfor = user.child('delay').val();
var name = user.child('name').val();

if(delayfor != 0){
members.child(event.params.memberid).remove();
join(userid,queueid,delayfor,name);
return;
}else{
return;
}
});

function join(userid,queueid,delayfor,name){
setTimeout(function(){
var ref = db.ref("queues/queueid/members/userid");
ref.set({
name: name,
timestamp: Date.now(),
delay : 0
});
}, delayfor*1000);
};

但是它不起作用,有人可以帮忙吗?

最佳答案

您需要将 setTimeout 包装在 Promise 中:

exports.delayqueue = functions.database.ref('/queues/{queueid}/members/{memberid}').onWrite(event => {
var members = event.data.ref.parent;
var user = event.data;
var queueid = members.parent;
var userid = event.params.memberid;
var delayfor = user.child('delay').val();
var name = user.child('name').val();

if (delayfor !== 0){
members.child(event.params.memberid).remove();
return join(userid,queueid,delayfor,name);
} else {
return;
}
});

function join(userid,queueid,delayfor,name){
return new Promise((resolve, reject) => {
setTimeout(function(){
var ref = db.ref("queues/queueid/members/userid");
ref.set({
name: name,
timestamp: Date.now(),
delay : 0
}).then(resolve, reject);
}, delayfor*1000);
});
};

请注意,等待 setTimeout 所花费的时间计为函数执行时间,并且还受函数超时的影响。如果您只延迟几秒钟,那可能没问题,但如果预计延迟数分钟,则此解决方案将不可行或不划算。

关于javascript - 如何在 firebase 云函数中使用 javascript setTimeout 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com