一旦我调用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 === 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接收参数电子邮件,现在我使用“ foreach”搜索具有此类电子邮件的用户。找到它后,我用另一个参数“ name”更新它的名称,然后返回true退出foreach循环。但是,我收到一条警告消息,提示我缺少一个返回值,在这种情况下,代码永远不会进入if语句。在正常情况下,我会使用数组的长度,并且在循环结束时返回false,但是在这里我做不到。
我的数据库:
users
-Lbq98URniAej2TkWBhG
email: "pepe@san.com"
name: "Pepe"
-Lbq9GC1A131De-iumI0
email: "pipa@boca.com"
name: "Pipa10"
答案 0 :(得分:1)
您没有从回调中的每个代码路径返回布尔值。例如,如果child.val().email === email
的计算结果为假,该怎么办?回调返回什么?在您的代码中,它不返回任何内容,因为没有执行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
});