Javascript 火基函数
我正在建立一个像游戏一样的网站。现在我想每5分钟更新一次用户的统计数据(黄金等)。为此,我设置了一个cronjob,每5分钟运行一次,没问题。然而,看起来firebase函数可能会“挂起”,即使在它们的站点上,它们的运行时间大约为5毫秒 我刚刚发现,如果我在cronjob运行(函数运行)时“购买”,我看到“gold”可能不会得到更新,它会被设置回我开始购买时的状态Javascript 火基函数,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我正在建立一个像游戏一样的网站。现在我想每5分钟更新一次用户的统计数据(黄金等)。为此,我设置了一个cronjob,每5分钟运行一次,没问题。然而,看起来firebase函数可能会“挂起”,即使在它们的站点上,它们的运行时间大约为5毫秒 我刚刚发现,如果我在cronjob运行(函数运行)时“购买”,我看到“gold”可能不会得到更新,它会被设置回我开始购买时的状态 我的功能可以接受吗 绞刑在哪里?是因为我通过(现在有100个)假用户进行循环吗 如果是这样的话,为什么firebase会说主要需要5
因此,预期的结果当然是函数更新了用户的收入,尽管它确实更新了,但是它似乎“挂起”,并且由于用户在函数运行时“买东西”,它没有完全正确地更新。这是一个异步vs阻塞问题 CalculateIncomePrivate是异步的,因此代码执行将前进到下一行,返回 所以把你的函数改为
function CalculateIncomePrivate()
return admin.database...
然后这样称呼它:
exports.CalculateIncome....
return CalculateIncomePrivate().then(function(){
resp....
}).catch(function(error){
resp.status(500).send(error);
});
确保返回任何已链接的承诺
这将有助于你做出承诺
这与Firebase功能有关
使用事务可以防止您所说的更改。但是你读的书太多了!当
units.worker
更新时,可以为数据库设置一个触发器,而不是Cron作业HTTP触发器。另外,您可能希望使用返回开始CalculateIncomePrivate()
。谢谢!这正是我想要的信息!非常感谢!
exports.CalculateIncome....
return CalculateIncomePrivate().then(function(){
resp....
}).catch(function(error){
resp.status(500).send(error);
});