Почему Firestore возвращает противоречивые результаты при запросе внутри облачных функций? - PullRequest
2 голосов
/ 04 июня 2019

Моя цель - создать идемпотентную облачную функцию, которая обновляет счетчик определенных документов.

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

const db = admin.firestore();

export const unprocessedReceiptsCount = 
functions.firestore.document('Purchases/{purchaseId}')
.onWrite(async (snapshot, context) => {

    const unprocessedRef = db.collection('Purchases').where('hasBeenProcessed', '==', false);
    const unprocessedSnap = await unprocessedRef.get();
    const count = unprocessedSnap.docs.length;
    console.log(count);
    return count;

});

Когда я обновляю поле hasBeenProcessed в любом документе, оно должно регистрировать непротиворечивый номер. Тем не менее, я получаю результаты по всей доске: 2, 63, 8, 44. Каждый раз, когда функция запускается, она показывает, что кажется случайным числом.

Что я делаю не так?

1 Ответ

2 голосов
/ 04 июня 2019

Наконец, это ответ:

Люди Google сказали это:

Ошибка вызвана этой проблемой https://github.com/grpc/grpc-node/issues/895.Наши инженеры посоветовали удалить node_modules и попробовать установить снова, так как grpc-js 0.4.1 сейчас не опубликован.

Их решение не сработало, но это сработало:

npm uninstall @grpc/grpc-js
npm install @grpc/grpc-js@0.4.0

Это также устраняет проблему в облачных функциях.

---- оригинальный комментарий ---

У меня та же проблема.На прошлой неделе все работало нормально, теперь даже простой get () без ограничений возвращает случайное число результатов.

Следующий код демонстрирует проблему с SDK администратора.Я отправил сообщение об ошибке в Google.

var count = 10
getAgain()
function getAgain() {
  admin.firestore().collection('activity').get().then((qs) => {
    console.log("activities: got " + qs.docs.length)
    count--
    if (count) getAgain()
  })
}

CONSOLE LOG:
activities: got 24
activities: got 6
activities: got 6
activities: got 2
activities: got 11
activities: got 6
activities: got 2
activities: got 12
activities: got 13
activities: got 14

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