Проверка облачных функций Firebase — ошибка snapshot.exists()

#node.js #firebase-realtime-database #google-cloud-functions

#node.js #firebase-база данных в реальном времени #google-cloud-функции

Вопрос:

Когда я пытаюсь запустить функцию

 const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.checkPostsRef = functions.https.onRequest((request, response) => {

    const postId = 'foo'

    admin.database().ref('/posts/'   postId).once('value', snapshot => {

        if !snapshot.exists() {
            console.log("          post does not exist          ") // I want this to print
            return
        }
    });
});
  

Я продолжаю получать ошибку Parsing error: Unexpected token snapshot :

введите описание изображения здесь

Как только я прокомментирую, snapshot.exists() { .... } все ли работает нормально.

Я перехожу по этой ссылке, в которой говорится, что есть .exists() функция, так почему у меня эта проблема?

введите описание изображения здесь

Комментарии:

1. Привет, Копье. Приятно видеть в приведенном ниже ответе, что у вас все получилось. Но, похоже, теперь вы действительно устранили проблему и из своего вопроса. Можете ли вы отменить это, чтобы вопрос показывал проблему, а ваш ответ показывал, как вы ее решили. О реальной проблеме: в вашем исходном коде проблема была вызвана отсутствием () if условия. В Swift if !snapshot.exists() допустимо, но в JavaScript оно должно быть if (!snapshot.exists()) . Обратите внимание, что это не имеет ничего общего с оператором return, а касается исключительно () вашего состояния if .

2. @FrankvanPuffelen Я вернул вопрос к исходному коду, а также удалил точки с запятой, которых у меня не было в исходном вопросе, и добавил в качестве изменений. Вы правы, имеет смысл сохранить его таким, каким он был изначально, чтобы, если следующий человек столкнется с проблемой, он мог увидеть мои ошибки.

Ответ №1:

Приятно видеть, как у вас это работает. Однако ваш вывод о return причине неверен, поэтому я объясню фактическую причину ниже.

Проблема в этом коде:

 if !snapshot.exists() ...
  

В JavaScript вы должны иметь круглые скобки вокруг полного условия if оператора. Таким образом, правильный синтаксис:

 if (!snapshot.exists()) ...
  

В Swift эти внешние скобки необязательны, но в JavaScript (и всех других языках на основе C, о которых я знаю) они обязательны.

Ответ №2:

оказывается, это было return; утверждение, которое вызывало проблему. Вместо этого мне пришлось использовать if-else оператор.

РЕДАКТИРОВАТЬ Как указал @FrankvanPuffelen в комментариях под вопросом и его ответом, эта проблема была не в return заявлении, а в том, как я изначально имел !snapshot.exists() . Потому что он не был заключен в круглые скобки (!snapshot.exists()) , что вызывало проблему. Так что это было не return утверждение, я очень мало знаю Javascript и использовал неправильный синтаксис.

 if (!snapshot.exists()) {

    console.log("          post does not exist          ");

} else {

    console.log("--------- post exists ---------");
}
  

К вашему сведению, я родной разработчик Swift, и в Swift вам не нужно ничего заключать в круглые скобки. В Swift вы можете сделать это:

 let ref = Database.database().reference().child("post").child("foo")
ref.observeSingleEvent(of: .value, with: { (snapshot) in

    if !snapshot.exists() {
        print("          post does not exist          ")
        return
    }
})