Почему мой скрипт узла ожидает 60 секунд для завершения после запроса Cloud Firestore? - PullRequest
1 голос
/ 26 мая 2019

Когда я запускаю этот скрипт из командной строки (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 Ответ

1 голос
/ 26 мая 2019

Вот, пожалуйста:

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-секундный тайм-аут, который доживает после того, как все сделано.Я подумал, что где-то должен быть выключатель, который замыкает внутренние таймеры, на которых работает эта библиотека Google, и находит ее в firebaseApp.delete (), которая выполняет следующие действия в соответствии со своими документами:

(метод) firebase.app.App.delete (): Promise

Отключает это приложение и освобождает ресурсы всех связанных служб.

Это работает как для 5.11.1, так и для 6.0.4.Я настоятельно рекомендую обновить сейчас, пока вы находитесь в начале проекта.Я использовал пакет npm firebase-admin вместо firebase, как вы используете, и мне НЕ нужно было делать этот вызов для свободных ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...