Firebaseからエラーが発生しました:
FIREBASE警告:ユーザーのコールバックによって例外がスローされました。 RangeError:最大コールスタックサイズを超えました
間違いは見つかりませんでした。
私はここでとても迷っています、助けてください。
私のコードは次のようになります:
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);
}
});
読んでいるのと同じノードを更新しています。これにより、_on("value"
_コールバックが再度トリガーされます。次に、新しい値を書き込みます。これにより、コールバックが再度トリガーされます。そして、それはランタイムがコールスタックスペースを使い果たすまで続きます。
最も簡単な解決策は、once()
の代わりに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);
}
_