База данных Firebase Realtime - foreach - должна получить значение в конце функции стрелки - PullRequest
0 голосов
/ 07 апреля 2019

Я получаю предупреждение «ожидается получение значения в конце функции стрелки», как только я вызываю функцию 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 отправьте параметр email, теперь я использую foreach для поиска пользователя, у которого есть такая электронная почта.Как только я нахожу его, я обновляю его имя другим параметром 'name' и возвращаю true, чтобы выйти из цикла foreach.Однако я получаю предупреждение о том, что мне не хватает одного возврата, что в случае, если код никогда не попадет в if statemente.В обычной ситуации я бы взял длину моего массива и вернул бы false, как только цикл достигнет своего конца, но здесь я не могу.

Моя база данных:

users
    -Lbq98URniAej2TkWBhG
           email: "pepe@san.com"
           name: "Pepe"
    -Lbq9GC1A131De-iumI0
           email: "pipa@boca.com"
           name: "Pipa10"

1 Ответ

1 голос
/ 07 апреля 2019

Вы не возвращали логическое значение из каждого пути кода в вашем обратном вызове. Например, что если child.val().email === email оценивает false? Что возвращает обратный вызов? В вашем коде он ничего не возвращает, потому что оператор 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
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...