为什么我的节点脚本在Cloud Firestore查询后等待60秒才能终止?

时间:2019-05-26 14:28:16

标签: javascript node.js firebase google-cloud-firestore

当我从命令行(node script.js)运行此脚本时,它似乎工作正常。 Firestore中的所有活动都将打印到控制台,然后进行“完成”。但是,脚本不会立即退出。它挂起恰好60秒,然后我又收到提示。这是怎么回事?

更新:是的,这是整个脚本。

const firebase = require('firebase')

const config = {
  apiKey: 'AIzaSyBmauMItX-bkUO1GGO_Nvrycy1Y6Pj1o_s',
  authDomain: 'fir-test-app-501b1.firebaseapp.com',
  databaseURL: 'https://fir-test-app-501b1.firebaseio.com',
  projectId: 'fir-test-app-501b1',
}

firebase.initializeApp(config)
firebase.firestore().collection('activities')
  .get()
  .then(qs => qs.docs.forEach(doc => console.log(doc.data())))
  .then(() => console.log('done.'))

我正在使用Node v8.11.3和Firebase v5.11.1。 GitHub链接:https://github.com/danbockapps/firebase60

1 个答案:

答案 0 :(得分:1)

您在这里:

DefaultPasswordHasher

设法深入研究集合上的.get()调用的代码,并发现AsyncQueue中有60秒的超时在完成所有操作后仍然存在。认为在某处必须有一个断开开关,该开关会使Google库运行的内部计时器短路,并在firebaseApp.delete()中找到它,并根据其文档执行以下操作:

  

(方法)firebase.app.App.delete():承诺

     

使该应用无法使用,并释放所有相关服务的资源。

这适用于5.11.1和6.0.4,我强烈建议您在项目初期就立即进行升级。我使用的是npm软件包firebase-admin而不是您正在使用的firebase,因此不需要调用此命令即可释放资源。