Javascript Firebase实时数据库-foreach-应在箭头函数末尾接收值
当我调用foreach函数遍历每个子函数并更新匹配的记录时,我收到警告“期望在箭头函数末尾接收一个值”Javascript Firebase实时数据库-foreach-应在箭头函数末尾接收值,javascript,firebase-realtime-database,Javascript,Firebase Realtime Database,当我调用foreach函数遍历每个子函数并更新匹配的记录时,我收到警告“期望在箭头函数末尾接收一个值” var email = req.body.email; var name = req.body.name; var result = false; userRef.once('value', snapshot => { result = snapshot.forEach(child => { if (child.val().email
var email = req.body.email;
var name = req.body.name;
var result = false;
userRef.once('value', snapshot => {
result = snapshot.forEach(child => {
if (child.val().email === email){
console.log(child.key);
admin.database().ref('users/'+child.key).update({name: name}).then(result =>{
res.status(200).json({message: 'Updated'});
return true;
})
.catch(err => {
console.log(err);
return false;
});
return true;
}
});
if (result === false){
res.status(200).json({message: 'User does not exist'});
}
});
我从http post收到了参数email,现在我使用“foreach”搜索拥有此类电子邮件的用户。找到它后,我用另一个参数“name”更新它的名称,并返回true以退出foreach循环。但是,我收到一条关于我缺少一个返回的警告消息,在这种情况下,代码永远不会进入if语句。在正常情况下,我会计算数组的长度,一旦循环结束,我会返回false,但在这里我不能
我的数据库:
users
-Lbq98URniAej2TkWBhG
email: "pepe@san.com"
name: "Pepe"
-Lbq9GC1A131De-iumI0
email: "pipa@boca.com"
name: "Pipa10"
您没有从回调中的每个代码路径返回布尔值。例如,如果
child.val()?回调返回什么?在代码中,它不会返回任何内容,因为没有执行任何return语句。这就是导致错误消息的原因。那样的话,你需要归还一些东西。也许这样的方法会奏效:
result = snapshot.forEach(child => {
if (child.val().email === email){
console.log(child.key);
admin.database().ref('users/'+child.key).update({name: name}).then(result =>{
res.status(200).json({message: 'Updated'});
return true;
})
.catch(err => {
console.log(err);
return false;
});
// this line doesn't help anything, commented out
//return true;
}
return true; // this line always returns true from forEach
});
道格,谢谢你。但是如果我没有更新任何内容,我怎么能返回false呢?我想让前台知道,我们找不到输入的电子邮件。//这一行没有任何帮助,注释掉了
它有帮助-当条件满足时,它会提前终止。根据您的建议,每次迭代都将执行返回true
,因此您不会执行多个循环,不是吗?如果child.val(),则不会。正如我所说,email==email
产生false。也许你们两个都可以。嗨,弗拉兹,我说的是firebase实时数据库,请看这里的文档: