Подтвердить что ты не робот

Ошибка Firebase Google (возвращаемая функция undefined, ожидаемое обещание или значение)

Я разрабатываю сервер с Firebase.

Я скопировал Google Developer Video на Youtube.

Это хорошо работает, но в журнале есть ошибка:

Возвращенная функция undefined, ожидаемое обещание или значение

Он говорит, что функция возвратила undefined, но я делаю function return a promise `set``

Как я могу это решить?

function sanitize(s) {
    var sanitizedText = s;
    console.log('sanitize params: ', sanitizedText);
    sanitizedText = sanitizedText.replace(/\bstupid\b/ig, "wonderful");
    return sanitizedText;
}
exports.sanitizePost = functions.database
    .ref('/posts/{pushId}')
    .onWrite(event => {
        const post = event.data.val();
        if (post.sanitized) return;

        console.log('Sanitizing new post', event.params.pushId);
        console.log(post);
        post.sanitized = true;
        post.title = sanitize(post.title);
        post.body = sanitize(post.body);
        return event.data.ref.set(post); 
    })

Я начинаю Firebase, Nodejs.

4b9b3361

Ответ 1

Как указывает Фрэнк в своем комментарии к вашему сообщению, оператор return, создающий предупреждение, следующий:

if (post.sanitized) return;

Предупреждение можно отключить, возвращая фиктивное значение (например, null, false, 0). Значение не используется.

Более ранние версии Cloud Function не жаловались, когда функция выходила с использованием оператора return без значения. Это объясняет, почему вы видите return; в видео, которое вы связали, и в документации. Комментарий к вопросу от Firebaser Frank van Pufeelen объясняет, почему было сделано изменение.

Самый простой способ устранить предупреждение - добавить возвращаемое значение, как предложил Фрэнк:

if (post.sanitized) return 0;

Другой вариант - изменить триггер с onWrite() на onCreate(). Тогда функция не будет вызываться, если сообщение очищено, и проверка, которая вызывает предупреждение, не требуется:

exports.sanitizePost = functions.database
    .ref('/test/{pushId}')
    .onCreate(event => {  // <= changed from onWrite()
        const post = event.data.val();
        //if (post.sanitized) return; // <= no longer needed

        console.log('Sanitizing new post', event.params.pushId);
        console.log(post);
        //post.sanitized = true; // <= not needed when trigger is onCreate()
        post.title = sanitize(post.title);
        post.body = sanitize(post.body);
        return event.data.ref.set(post);
    });

Ответ 2

Я получил эту же ошибку при попытке прочитать документ с помощью .get() которая возвращает обещание.

Что я заметил в журналах функций, так это то, что он фактически записывает действительные значения после закрытия функции, даже если ошибка говорит о том, что результат был неопределенным.

В официальном уроке по Firebase на YouTube я обнаружил, что для устранения этой ошибки мне нужно было вернуть обещанную строку кода. Проверьте минуту 4:18 в учебном связанном видео [ https://youtu.be/d9GrysWH1Lc]