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

Tom*_* Re 18 node.js firebase

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

var firebase = require('firebase');
var blahFirebase = new firebase('https://myfirebase.firebaseIO.com/blah');
blahFirebase.once('value', function (snapshot) {
    //
});
Run Code Online (Sandbox Code Playgroud)

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

小智 16

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

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

// Do something

app.delete(); // Release resources
Run Code Online (Sandbox Code Playgroud)

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

  • 你也可以使用 `var firebase = require("firebase") firebase.app('[DEFAULT]').delete()` (2认同)
  • 在登录和注销后,使用```app.delete()```不会退出我的进程.运气好吗?这是我的最小例子:https://gist.github.com/juriejan/2134fc2569e56a24fc9b886f1f156198 (2认同)

Kat*_*ato 10

更新

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

原版的

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

要结束该过程,您可以简单地从回调内部利用process.exit():

blahFirebase.once('value', function (snapshot) {
    //
    process.exit();
});
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用Node.js和Firebase来开发AWS lambda.如果我调用process.exit(),调用lambda会失败,但如果我什么也不做,它会超时.database.goOffline()不起作用.更好的解决方案? (3认同)

Wil*_* Wu 9

我的情况是使用firebase管理员,

const  admin = require('firebase-admin');
Run Code Online (Sandbox Code Playgroud)

我可以通过结束节点进程

return admin.app().delete();
Run Code Online (Sandbox Code Playgroud)