【问题标题】:Firebase Cloud Functions check is snapshot.exists() errorFirebase Cloud Functions 检查是 snapshot.exists() 错误
【发布时间】:2020-11-07 10:22:34
【问题描述】:

当我尝试运行一个函数时

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() { .... } 一切正常

我正在关注这个link,它说有一个.exists() 函数,那我为什么会遇到这个问题?

【问题讨论】:

  • 嘿兰斯。很高兴在下面的答案中看到您成功了。但看起来你现在实际上也从你的问题中删除了这个问题。您能否还原它,以便问题显示问题,而您的回答显示您如何解决它。关于实际问题:在您的原始代码中,问题是由于在 if 条件周围缺少 () 引起的。在 Swift 中,if !snapshot.exists() 是有效的,但在 JavaScript 中它必须是 if (!snapshot.exists())。请注意,这与 return 语句无关,而纯粹是关于 () 围绕您的 if 的条件。
  • @FrankvanPuffelen 我将问题改回原始代码,并且我还删除了原始问题中没有的分号并添加为编辑。你是对的,保持原来的样子是有意义的,这样如果下一个人遇到问题,他们就能看到我的错误。

标签: node.js firebase-realtime-database google-cloud-functions


【解决方案1】:

很高兴看到你是如何让它工作的 Lance。您对return 是原因的结论是错误的,所以我将在下面解释实际原因。

问题出在这段代码中:

if !snapshot.exists() ...

在 JavaScript 中,您必须if 语句的完整条件周围加上括号。所以正确的语法是:

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

在 Swift 中,这些外括号是可选的,但在 JavaScript(以及我知道的所有其他基于 C 的语言)中,它们是必需的。

【讨论】:

    【解决方案2】:

    原来是return; 语句导致了问题。我不得不改用if-else 语句。

    编辑正如@FrankvanPuffelen 在问题和他的回答下方的 cmets 中指出的那样,这个问题与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
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2018-06-17
      • 1970-01-01
      • 2019-02-04
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多