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

标签 javascript firebase google-cloud-functions

我正在尝试为 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/

相关文章:

Firebase 推送通知在发送到设备组 token 时仅显示 "from"

android - 使用 Firebase Android 排序数据

ios - 如何过滤存储在数据库中的一组特定用户?

javascript - 如何从云功能内部运行查询?

javascript - 如何使用jspdf获取整个div并导出为pdf?

javascript 正则表达式支持带有数字和字母的 UTF8 字符

javascript - 我怎样才能在 OOP 方面做得更好?

javascript - 如何在客户端的浏览器/操作系统/系统上远程调试 jQuery 应用程序?

git - 如何使用 cloudbuild yaml 排除部署中的文件和目录?

function - 使用参数调用 Google Cloud 函数