2017-12-19 4 views
0

Ich habe einen Live-Scoring-Server, der die Punkte in Firebase aktualisiert, wenn Spiele erstellt werden. Derzeit verfügt der Knotenserver über einen Listener mit dem folgenden Code, der sich speziell auf den Knotentyp mit Firebase bezieht.Mehrere Listener auf Firebase

ref.orderByChild("league").equalTo('NBA').on("value", function(snapshot) { 
refreshInterval = setInterval(function() { 
    nbafile.nbaUpdate(snapshot.val()); 

}, 5000); 

}, function(errorObject) {}); 
}; 

Wie es jetzt steht, wenn ein Spiel in Feuerbasis erstellt wird ein Timer gesetzt ist, das Spiel alle 5 Sekunden aktualisiert werden und stoppt die Aktualisierung nach dem Spiel ist geschlossen.

IST HIER DAS PROBLEM:

Wenn ich einen zusätzlichen Hörer für einen anderen Sport wie NCAAB versuchen, und fügen Sie es entweder nie aktiviert oder sie sind beide genannt, aber der Timer nicht zu stoppen.

ref.orderByChild("league").equalTo('NCAAB').on("value", function(snapshot) { 
refreshInterval = setInterval(function() { 
    cbbfile.cbbUpdate(snapshot.val()); 
}, 5000); 
}, function(errorObject) {}); 

}

Unabhängig davon, welche Funktion aufgerufen wird zuerst bekommt Präzedenzfall, der andere Sport zündet nicht.

Unten ist ein vollständiges Stück Code zusammen mit einer if-Anweisung, die die Spiele zeigen, gehen.

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 { 

Antwort

0

Der Grund, warum dies nicht funktionierte war, dass ich auf jeden lister die gleiche clearTimer() Funktion hatte. Also löste sich das Intervall bei beiden Zuhörern.

Verwandte Themen