Чтение и копирование коллекции документов с Typescript - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь скопировать коллекцию документов из одной коллекции в другую с помощью облачной функции Firestore.Я моделирую свой код из Облачные функции: Как скопировать коллекцию Firestore в новый документ? .

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

-Запрещенное ключевое слово 'var', используйте вместо него 'let' или 'const' -Побещения должны обрабатываться соответствующим образом-объявляется 'promise', но его значение никогда не читается.

I'mПредполагая, что это проблема с синтаксисом TS, потенциально отличным от JS.

    exports.addNewFollowerPost = functions.firestore
    .document(`followers/{userID}/userFollowers/{newFollowerID}`)
    .onCreate(async (snap, context) => {
        const newFollowerID: string = context.params.newFollowerID;
        const userID: string = context.params.userID;

        admin.firestore().collection(`profile_posts`).doc(newFollowerID).collection(`posts`).get().then(query => {
            query.forEach (function(doc){
                const promise = admin.firestore().collection(`fake_posts`).doc(doc.data().barcode).set(doc.data());
            });
        });

    });

Я все еще довольно плохо знаком с облачными функциями и TS / JS.Ценю любой совет!


ОБНОВЛЕННЫЙ КОД

Я воспользовался советом и создал список обещаний и назвал его Promise.all:

exports.addNewFollowerPost = functions.firestore
    .document(`following/{userID}/userFollowers/{newFollowerID}`)
    .onCreate(async (snap, context) => {
        const newFollowerID: string = context.params.newFollowerID;
        const userID: string = context.params.userID;

        try {
            const promises = []
            const newFollowerPostQuerySnapshot = await admin.firestore().collection(`profile_posts`).doc(newFollowerID).collection(`posts`).get()
            const followerPosts = newFollowerPostQuerySnapshot.docs
            followerPosts.forEach(post => {
                const p = admin.firestore().collection(`fake_posts`).doc(post.id).set(post);
                promises.push(p)
            })
            const snapshots = await Promise.all(promises);
        }
        catch (error) {
            console.log(error)
        }
    })

Яможет успешно развернуться, но затем появляется следующая ошибка: «Значение для аргумента« данные »не является допустимым документом Firestore. Не удалось сериализовать объект типа« QueryDocumentSnapshot ». Firestore не поддерживает объекты JavaScript с пользовательскими прототипами»

Я не могу передать DocumentSnapshot с помощью метода set?

...