Firestore Cursor не возвращает никаких документов - PullRequest
0 голосов
/ 28 октября 2019

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

Каждые 5 минут срабатывает следующая функция. Он проверяет, установлен ли запущенный документ коллекции очереди, если нет, то получает первый документ, получает поле id из этого документа и обновляет документ коллекции очереди

exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun(async(context) => {
    try{
        const q = await admin.firestore().collection('queueService').doc('extension').get();
        const status = q.data().status;

        if(status !== "start" || status !== "continue) {
            const first = admin.firestore().collectionGroup('extItems')
                .where('platform', "==", "mba")
                .orderBy('created_at')
                .limit(1);
            const snapshot = await first.get();
            await firestoreUpdateCursor(snapshot.docs[0].data().id, 1, "start", "extension");
        } else {
            console.log('Sync is currently running')
        }
    } catch (e) {
        console.log(e.message)
    }
});

. Функция нижезатем срабатывает при обновлении документа коллекции queueService. Я хочу, чтобы он использовал курсор startAt. Затем он получит документы, как показано ниже, выполнит X с ними, а после этого обновит queueService с последним идентификатором, что вызовет функцию снова, пока не останется больше элементов.

module.exports = functions.firestore.document("queueService/extension").onUpdate(async(change, context) => {
    try {
        const {cursor, lastCount, status} = change.after.data();
        const iPromises = [];
        const fullfilled = [];

        let next;
        if(lastCount > 0) {
            if(status === "start" || status === "continue") {
                next = admin.firestore().collectionGroup('extItems')
                    .where('platform', "==", "mba")
                    .orderBy('created_at')
                    .startAt(cursor)
                    .limit(100);
            } else {
                console.log("Extension Items already processing");
                return null;
            }

            const result = await next.get();
            console.log(result.docs.length);
            if(result.docs.length <= 0) return await firestoreUpdateCursor(null, result.docs.length, null, "extension");
            //do more stuff
            await firestoreUpdateCursor(result.docs[result.docs.length - 1].data().id, result.docs.length, "continue", "extension")
      }

    } catch (e) {
        console.log(e.message)
    }
});

Проблема, с которой я сталкиваюсь, заключается в том, что мой курсор не работает. Запланированная функция обновляет queueService нормально, но затем сработавшая функция не возвращает документов

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