2017-01-26 37 views
7

mam błąd z Firebase:nodejs Firebase błędu RangeError: Maksymalny rozmiar stosu wywołań przekroczyła awarię

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

Nie mogę znaleźć mój błąd.

Jestem bardzo zagubiony tutaj, proszę o pomoc.

Mój kod wygląda następująco:

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); 
    } 
}); 

Odpowiedz

7

Ty aktualizując tym samym węźle, który czytasz. Powoduje to ponowne wywołanie oddzwaniania on("value". Który z kolei zapisuje nową wartość, która ponownie uruchamia wywołanie zwrotne. A to trwa, dopóki w środowisku uruchomieniowym nie skończy się miejsce na stosie wywołań.

Najprostszym rozwiązaniem jest użycie once() zamiast on():

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

dziękuję Ci pomógł mi wiele. –

+0

Dzięki, Frank, że pomógł mi też, robiłem to samo, utknąłem od 3 dni. –