Firebase Realtime Database-foreach-预期在箭头功能结尾处接收值

时间:2019-04-07 20:19:03

标签: 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 === 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"

1 个答案:

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