от
У меня есть коллекция в пожарном магазине. Я слушаю изменения в бэкэнде узла. Теперь, когда я получаю изменение, я обрабатываю данные и удаляю документ 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 Ответ

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