Я пытаюсь скопировать коллекцию документов из одной коллекции в другую с помощью облачной функции 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?