【问题标题】:Node.js App Doesn't End When Calling Firebase Database Query [duplicate]调用 Firebase 数据库查询时,Node.js 应用程序没有结束 [重复]
【发布时间】:2016-11-25 11:21:40
【问题描述】:

我有一个在 Node.js 中运行的简单 Firebase 查询,它成功返回数据。但是,Node.js 应用程序没有完成。它挂起,好像它正在等待与 Firebase 相关的某些事情完成。实现这一点以便 Node.js 应用程序完成的正确方法是什么?

参考资料:

遵守我们的承诺(和回调) https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html

Node.js Firebase 查询 https://firebase.google.com/docs/reference/node/firebase.database.Query

代码:

调用我的exists方法以查看Firebase中是否存在产品url。

firebase.exists(url)
    .then(data => console.log(data))
    .catch(data => console.log(data));

检查产品网址是否存在于 Firebase 中的方法。返回一个承诺。请注意 Firebase once 方法的使用。

public exists(url): any {
    return this.firebase.database().ref('products/').orderByChild("url").equalTo(url).once("value").then(function (snapshot) {
        return snapshot.exists();
    });
}

来自https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html的代码示例

// Fetch a Blog Post by ID. Returns a Promise of an actual object, not a DataSnapshot.
function getArticlePromise(id) {
  return ref.child('blogposts').child(id).once('value').then(function(snapshot) {
    return snapshot.val();
  });
}

回答:通过使用下面 Frank 建议的 process.exit() 能够解决此问题。

firebase.exists(url)
    .then(data => { console.log(data); process.exit(); })
    .catch(data => console.log(data));

【问题讨论】:

标签: node.js firebase promise firebase-realtime-database


【解决方案1】:

您从函数返回两次,这没有意义。我相信你想要这个:

public exists(url): any {
    this.firebase.database().ref('products/').orderByChild("url").equalTo(url).once("value").then(function (snapshot) {
        return snapshot.exists();
    });
}

【讨论】:

  • 这个返回语法很有趣,我已经更新了我的问题以包含来自 Firebase 文档的示例代码,这些代码显示了正在使用的这个语法。对代码进行此更改会导致错误“无法读取未定义的属性”,因为该函数不再返回承诺。
  • 啊 - 我想我明白了 - 你正在返回一个带有结果功能的承诺。很抱歉,我的困惑让问题“蒙上了阴影”——请原谅!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2015-01-25
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多