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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (25)

当我从命令行(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

提问于
用户回答回答于

干得好:

var firebaseApp = firebase.initializeApp(config);
var database = firebase.firestore();

database.collection('activities')
  .get()
  .then(qs => qs.docs.forEach(doc => console.log(doc.data())))
  .then(() => {
      console.log('done.');
      firebaseApp.delete();
      // database.disableNetwork(); // Another way to do this, though not as clean
  });

管理以深入研究集合上的.get()调用代码,并发现在完成所有操作后,AsyncQueue中存在60秒超时。想象一下,某个地方必须有一个断开开关,它使谷歌库运行的内部定时器短路,并在firebaseApp.delete()中找到它,根据其文档执行以下操作:

(方法)firebase.app.App.delete():Promise 使此应用程序无法使用并释放所有相关服务的资源。

这适用于5.11.1和6.0.4,我强烈建议您在项目早期进行升级。我正在使用npm包firebase-admin而不是像你正在使用的firebase,并且不需要对免费资源进行此调用。

扫码关注云+社区

领取腾讯云代金券