Почему docChange вызывается дважды после удаления в документе? - PullRequest
1 голос
/ 04 июля 2019

У меня есть коллекция в пожарном магазине. Я слушаю изменения в бэкэнде узла. Теперь, когда я получаю изменение, я обрабатываю данные и удаляю документ Firestore, связанный с изменением. Когда я вызываю delete, я снова получаю то же самое изменение в слушателе, и в итоге я снова обрабатываю данные.

Я искал по интернету и не смог найти решения этой проблемы.

let doc_form_reponse = db.collection(CONSTANTS.FIREBASE.COLLECTIONS.SUBMISSIONS);
let qref1 = doc_form_reponse.where('context', '==', 'someContext').where('processed', '==', false);
let observer_form_response = qref1.onSnapshot(docSnapshot => {
    docSnapshot.docChanges().forEach(docChange => {
        let doc = docChange.doc;
        // save data to Mongo Db
        var survey = Surveyresponse({
            resp: docChange.doc.data().response,
            metadata: JSON.stringify(docChange.doc.data().metadata)
        });

        survey.save(function (err, resp) {
            if (err) return console.error(err)
            else {
                console.log(doc.id," deleted from firebase");
                doc.ref.delete();
            }

        })
    })
    // ...
}, err => {
    console.log(`Encountered error: ${err}`);
});

После вызова doc.ref.delete () после получения изменения и получения записи в БД.

1 Ответ

1 голос
/ 04 июля 2019

Слушатели запросов в Cloud Firestore будут запускаться каждый раз, когда набор результатов для запроса изменяется.Таким образом, если вы удалите документ, полученный по запросу, ваш слушатель снова сработает, чтобы отразить это изменение.Это нормальное поведение, и нет никакого способа обойти это.Если вы не хотите обрабатывать удаления из результирующего набора, вам придется проверить тип изменения документа в слушателе, , как описано в документации .У вашего docChange есть параметр типа, который указывает, что отличается от предыдущего снимка.

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