我有一个实时评分服务器,可以在创建游戏时更新firebase中的分数。目前,节点服务器有一个监听器,下面的代码专门引用带有firebase的节点类型。
ref.orderByChild("league").equalTo('NBA').on("value", function(snapshot) {
refreshInterval = setInterval(function() {
nbafile.nbaUpdate(snapshot.val());
}, 5000);
}, function(errorObject) {});
};
现在,当在firebase中创建游戏时,计时器设置为每5秒更新一次游戏,并在游戏状态关闭后停止更新。
这是问题所在:
如果我尝试为NCAAB等其他运动添加额外的监听器,则它永远不会被激活,或者它们都被呼叫,但计时器不会停止。
ref.orderByChild("league").equalTo('NCAAB').on("value", function(snapshot) {
refreshInterval = setInterval(function() {
cbbfile.cbbUpdate(snapshot.val());
}, 5000);
}, function(errorObject) {});
}
无论哪种功能首先被称为先例,另一项运动都不会被激活。
下面是一段完整的代码以及游戏指向的if语句。
const startUpdate = function(db, ref) {
db = admin.database();
exports.db = db;
ref = db.ref('game');
exports.ref = ref;
console.log('-----------------------------------');
ref.orderByChild("league").equalTo('NBA').on("value", function(snapshot) {
refreshInterval = setInterval(function() {
nbafile.nbaUpdate(snapshot.val());
}, 5000);
}, function(errorObject) {});
};
const startUpdate2 = function(db, ref) {
db = admin.database();
exports.db = db
ref = db.ref('game');
exports.ref = ref;
console.log('-----------------------------------');
ref.orderByChild("league").equalTo('NCAAB').on("value", function(snapshot) {
refreshInterval = setInterval(function() {
cbbfile.cbbUpdate(snapshot.val());
}, 5000);
}, function(errorObject) {});
}
nbaupdate.js
let nbaUpdate = function(games) {
console.log("Professional Basketball");
if (games === null) {
console.log('Games object empty');
return;
}
for (var id in games) {
if (games[id].league === 'NCAAB');
if (ts >= games[id].scheduledTimeUnix);
if ((games[id].status == 'complete') || (games[id].status == 'closed')) {
sports.clearTimer();
console.log(games[id].status)
} else {
答案 0 :(得分:0)
这不起作用的原因是我在每个列表器上都有相同的clearTimer()函数。因此,两个听众的间隔都在清除。