一次firebase后节点进程不会退出

Posted

技术标签:

【中文标题】一次firebase后节点进程不会退出【英文标题】:node process doesn't exit after firebase once 【发布时间】:2013-08-05 11:31:07 【问题描述】:

将 node.js 与 npm firebase 一起使用。

var firebase = require('firebase');
var blahFirebase = new firebase('https://myfirebase.firebaseIO.com/blah');
blahFirebase.once('value', function (snapshot) 
    //
);

为什么节点读完数据不退出?

【问题讨论】:

第三行应该是onceon? 应该是一次。 【参考方案1】:

更新

请注意,这不再适用。使用 once() 时 Node.js 将不再挂起,尽管只要有活动的侦听器订阅了远程服务器,它就会保持打开状态。

原创

Firebase 进程打开到服务器的套接字,并为这些连接上的传入数据建立侦听器。就像节点 Web 服务器一样,等待传入的 HTTP 连接,这使进程保持打开状态。

要结束进程,您可以简单地在回调内部使用 process.exit():

blahFirebase.once('value', function (snapshot) 
    //
    process.exit();
);

【讨论】:

我正在使用 Node.js 和 Firebase 开发 AWS lambda。如果我调用 process.exit(),调用 lambda 会失败,但如果我什么都不做,它将超时。 database.goOffline() 不起作用。有更好的解决方案吗? @syshen 在 Lambda 你应该调用context.succeed() with process.exit() 过程结束,但我没有将数据写入数据库。有人遇到过这个问题吗? 使用 firebase.delete() 代替。 firebase.google.com/docs/reference/node/firebase.app.App#delete 调用 firebase.database().goOffline() 或 firebase.app().delete()。 firebase.google.com/support/release-notes/js【参考方案2】:

在新的 Firebase API 中,您应该使用 firebase.app.App.delete() 来释放其持有的资源。例如:

var app = firebase.initializeApp( ... );
var db = firebase.database();

// Do something

app.delete(); // Release resources

不要使用process.exit(),因为它会停止整个过程(这不是您通常想要的)。

【讨论】:

你也可以使用var firebase = require("firebase") firebase.app('[DEFAULT]').delete() 但是我怎么能停下来听.on('value', function () )呢?我有一个搜索表单,我必须停止监听才能使用不同的参数开始另一个。 使用app.delete() 在登录和注销后不会退出我的进程。这有什么好运气吗?这是我的最小示例:gist.github.com/juriejan/2134fc2569e56a24fc9b886f1f156198 如果您使用firebase.auth(),您可能也需要先注销:***.com/a/65660764/198219【参考方案3】:

我的案例是使用 firebase 管理员,

const  admin = require('firebase-admin');

我可以通过

结束节点进程
return admin.app().delete();

【讨论】:

如果不起作用,请尝试在放置这行代码时更改(接近末尾)【参考方案4】:
setTimeout(()=> 
    process.exit(1);
, 1000);

不知道为什么,但是解决了这个问题。

【讨论】:

以上是关于一次firebase后节点进程不会退出的主要内容,如果未能解决你的问题,请参考以下文章

节点递归承诺永远不会退出

使用 Github 包作为 npm 节点模块时的 Firebase 云功能部署问题

Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - 在 vue.js 中调用 Fireba

Stripe 和 Firebase:FirebaseError:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 Fireba

使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点

Firebase 和 Flutter 是不是支持在 Web 上一次性读取?