Algolia/Firebase - 终端执行代码然后闲置

Algolia/Firebase - Terminal executes code then sits idle

我关注了这些 Algolia/Firebase docs。我做了一些调整,因为一些初始设置说明已经过时,但我让它工作了。我将该页面中的所有代码放入我的 app.js 文件中。在终端内,我 运行 'npm start' 并且当我检查我的 Algolia 控制台时,Indices 成功地索引了我的 Firebase 数据。

app.js

var admin = require("firebase-admin");
admin.initializeApp({
  credential: admin.credential.cert({
    projectId: "*****",
    clientEmail: "*****",
    privateKey: "-----BEGIN PRIVATE KEY-----\n...code...\n-----END PRIVATE KEY-----\n"
  }),
  databaseURL: "*****.firebaseio.com"
});

var firebase = require('firebase');

var config = {
    apiKey: "*****",
    authDomain: "*****.firebaseapp.com",
    databaseURL: "*****.firebaseio.com",
    storageBucket: "*****.appspot.com",
    messagingSenderId: "*****"
  };
  firebase.initializeApp(config);

var algoliasearch = require('algoliasearch');
var client = algoliasearch('*******', '***...**');
var index = client.initIndex('posts');

// Connect to our Firebase contacts data
var rootRef = firebase.database().ref('posts');

// Get all data from Firebase
rootRef.on('value', initIndex);

function initIndex(dataSnapshot) {
  // Array of data to index
  var objectsToIndex = [];
  // Get all objects
  var values = dataSnapshot.val();
  // Process each Firebase ojbect

  for (var key in values) {
    if (values.hasOwnProperty(key)) {
      // Get current Firebase object

      var firebaseObject = values[key];
      // Specify Algolia's objectID using the Firebase object key
      firebaseObject.objectID = key;

      // Add object for indexing
      objectsToIndex.push(firebaseObject);
    }
  }
  // Add or update new objects
  index.saveObjects(objectsToIndex, function(err, content) {
    if (err) {
      throw err;
    }
    console.log('Firebase<>Algolia import done');
  });
}

rootRef.on('value', reindexIndex);
function reindexIndex(dataSnapshot) {
  // Array of objects to index
  var objectsToIndex = [];
  // Create a temp index
  var tempIndexName = 'contacts_temp';
  var tempIndex = client.initIndex(tempIndexName);
  // Get all objects
  var values = dataSnapshot.val();
  // Process each Firebase object
  for (var key in values) {
    if (values.hasOwnProperty(key)) {
      // Get current Firebase object
      var firebaseObject = values[key];
      // Specify Algolia's objectID using the Firebase object key
      firebaseObject.objectID = key;
      // Add object for indexing
      objectsToIndex.push(firebaseObject);
    }
  }
  // Add or update new objects
  index.saveObjects(objectsToIndex, function(err, content) {
    if (err) {
      throw err;
    }
    // Overwrite main index with temp index
    client.moveIndex(tempIndexName, 'contacts', function(err, content) {
      if (err) {
        throw err;
      }
      console.log('Firebase<>Algolia reimport done');
    });
  });
}

// Listen for changes to Firebase data
rootRef.on('child_added', addOrUpdateObject);
rootRef.on('child_changed', addOrUpdateObject);
function addOrUpdateObject(dataSnapshot) {
  // Get Firebase object
  var firebaseObject = dataSnapshot.val();
  // Specify Algolia's objectID using the Firebase object key
  firebaseObject.objectID = dataSnapshot.key;
  // Add or update object
  index.saveObject(firebaseObject, function(err, content) {
    if (err) {
      throw err;
    }
    console.log('Firebase<>Algolia object saved');
  });
}

// Listen for changes to Firebase data
rootRef.on('child_removed', removeIndex);
function removeIndex(dataSnapshot) {
  // Get Algolia's objectID from the Firebase object key
  var objectID = dataSnapshot.key;
  // Remove the object from Algolia
  index.deleteObject(objectID, function(err, content) {
    if (err) {
      throw err;
    }
    console.log('Firebase<>Algolia object deleted');
  });
}

终端执行了以下语句:

>node app.js

Firebase<>Algolia reimport done
Firebase<>Algolia object saved
Firebase<>Algolia import done
//terminal just sits idle from this point on

正如我所说,对象已编入索引(我在 Firebase 中只有 1 个对象)。

问题出在最后的 Firebase<>Algolia import done 语句之后,没有任何反应。

终端处于一种似乎正在等待发送更多数据或给出更多指令的状态。它什么都不做。我必须按 CTRL+C 才能退出。

终端在等待什么?为什么它在从 FB 索引所有内容后不自行退出?

我参加了一个聚会,有人指出,如果我将新数据添加到我的 Firebase 数据库中,那么它会自动在 Algolia 中建立索引。这意味着终端闲置的原因是它仍在监听事件。基本上它不应该停止停留,这样它就可以继续搜索。