2017-01-26 4 views
7

Ich habe einen Fehler aus der Feuerbasis:NodeJS Feuerbasis Fehler Auslöser Range: Maximale Call-Stack Größe Ausfall überschritt

FIREBASE WARNING: Exception was thrown by user callback. RangeError: Maximum call stack size exceeded

Ich habe nicht meinen Fehler finden.

Ich bin sehr hier drin verloren, bitte helfen.

Mein Code sieht wie folgt aus:

app.post('/updateCoords', (req, res)=>{ 
    var usrID = req.body.id; 
    var usrCoords = { 
     lat: req.body.lat, 
     long: req.body.long 
    } 
    console.log('userID : '+usrID+' lat : '+usrCoords.lat+' long : '+usrCoords.long); 
    var ref = database.ref('users'); 
    try{ 
     ref.orderByChild('username').equalTo(usrID).on("value", (snapshot)=> { 
      if(!snapshot.val()){ 
       // Error 
       return res.json({msg: 'username is not in D.B', success: false}); 
      } 
      // Success 
      admin.database().ref('users/' + usrID + '/currentLocation').update({ 
       lat: usrCoords.lat, 
       long: usrCoords.long 
      }); 
      return res.json({msg: 'user coords changed', success: true}); 
     }); 
    }catch(ex){ 
     console.log('ex /updateCoords = '+ex); 
    } 
}); 

Antwort

7

Sie aktualisieren den gleichen Knoten, den Sie gerade lesen. Dadurch wird der Rückruf on("value" erneut ausgelöst. Die wiederum schreibt dann einen neuen Wert, der den Rückruf erneut auslöst. Und das wird fortgesetzt, bis die Laufzeit den Aufrufstapelspeicherplatz nicht mehr aufweist.

Die einfachste Lösung ist once() statt on() zu verwenden:

var ref = database.ref('users'); 
    try{ 
     ref.orderByChild('username').equalTo(usrID).once("value", (snapshot)=> { 
      if(!snapshot.val()){ 
       checker = true; 
      } 

      if(snapshot.val()){ 
       admin.database().ref('users/' + usrID + '/currentLocation').update({ 
        lat: usrCoords.lat, 
        long: usrCoords.long 
       }); 
       return res.json({msg: 'user coords changed', success: true}); 
      // checker = false; 
      } 


      // res.json({msg: 'username is not in D.B', success: false}); 

     }); 
    }catch(ex){ 
     console.log('ex /updateCoords = '+ex); 
    } 
+0

danke half mir sehr. –

+0

Danke Frank, das hat mir auch geholfen, ich machte das gleiche, war seit den letzten 3 Tagen fest. –

Verwandte Themen