#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
условия. В Swiftif !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
}
})