Невозможно удалить объекты из Алголии - PullRequest
0 голосов
/ 28 марта 2019

У меня есть почтовый объект, который кто-то первоначально сделал, затем это вызвало бы функцию Firebase, чтобы затем добавить его в Algolia для запроса позже.У меня возникают некоторые проблемы при удалении объекта из Algolia, когда пользователь удаляет сообщение.Функция запускается в Firebase, но она «обновляет» сообщение и не удаляет его.

Вот журналы с консоли Firebase Functions:

onPostWrite: Function execution took 79 ms, finished with status: 'ok'
onPostWrite: Function execution started
onPostWrite: Updated post -Lb3lcmWn1iXAdnbFDmo

Вот кодвыполняется для функции:

exports.onPostWrite = functions.database.ref('/posts/{postId}').onWrite((snapshot, context) => {
  const index = client.initIndex(ALGOLIA_INDEX_POSTS);
  //When the data is first created...
  if (snapshot.before.exists()) {
    const post = snapshot.before.val();

    post.objectID = context.params.postId;

    console.log('Updated post ', post.objectID);
    return index.saveObject(post);
  }
  //When data has been deleted...
  if (!snapshot.after.exists()) {
    const post = snapshot.before.val();

    post.objectID = context.params.postId;

    console.log('Deleted post ', post.objectID);
    return index.deleteObject(post.objectID);
  }

  if (!snapshot.before.exists()) {
    const post = snapshot.after.val();

    post.objectID = context.params.postId;

    console.log('Created post ', post.objectID);
    return index.saveObject(post);
  }
});

Как вы можете сказать, она выполняет только команду "Обновить", а не команду создания или удаления.

Я думаю, что она может что-то делатьс моими заявлениями IF, но я не уверен.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 апреля 2019

Вам необходимо изменить порядок ваших if операторов.

// Called onUpdate, a snapshot exists before the update and exists after the update
// Called onDeletion, a snapshot exists before the update and doesn't exist after the update
if (snapshot.before.exists()) {

// Called onDeletion, nothing exists after operation
if (!snapshot.after.exists()) {

// Called onCreate. Nothing existed `before`, but it does now
if (!snapshot.before.exists()) {

Поскольку вы возвращаетесь в каждом блоке, ваше выполнение останавливается после первого блока даже при удалении.Я думаю, что если вы поменяете местами первые два блока, все будет работать так, как ожидалось:

// Called onDelete, nothing exists after operation
if (!snapshot.after.exists()) {

// Called onUpdate, a snapshot exists before the update and exists after the update
// Called onDelete, a snapshot exists before the update and doesn't exist after the update
// Since you've moved a "better" `onDelete` above this, this function will now only be called for onUpdate 
if (snapshot.before.exists()) {

// Called onCreate. Nothing existed `before`, but it does now
if (!snapshot.before.exists()) { 

Примечание: вам не нужен последний оператор if, так как предыдущие два будут ловить delete иupdate операций, последний - единственный путь, по которому может идти ваш код.Вот мой взгляд на все это:

exports.onPostWrite = functions
  .database
  .ref('/posts/{postId}')
  .onWrite((snapshot, context) => {
    const index = client.initIndex(ALGOLIA_INDEX_POSTS);

    // no snapshot.before.exists(), post has been created
    if (!snapshot.before.exists()) {
      const post = snapshot.after.val();
      post.objectID = context.params.postId;

      console.log('Creating post ', post.objectID);
      return index.saveObject(post);
    }

    const post = snapshot.before.val();
    post.objectID = context.params.postId;

    // no snapshot.after.exists(), post has been deleted
    if (!snapshot.after.exists()) {
      console.log('Deleting post ', post.objectID);
      return index.deleteObject(post.objectID);
    }

    // snapshot.before.exists() AND snapshot.after.exists(), post has been updated
    console.log('Updating post ', post.objectID);
    return index.saveObject(post);

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