У кого-нибудь есть подобная проблема при попытке сделать несколько обновлений пакетным способом?
Вот моя функция:
admin.initializeApp();
const db = admin.firestore();
export const unfollowRemoveUser = functions.https.onCall((data, context) => {
const user1id = data.user1
const user2id = data.user2
const user1DocRef = db.collection('users').doc(user1id)
const user2DocRef = db.collection('users').doc(user2id)
const batch = db.batch();
batch.update(user1DocRef, {followingNum : FieldValue.increment(-1)});
batch.update(user2DocRef, {followersNum : FieldValue.increment(-1)});
// Commit the batch
return batch.commit().then(function () {
// ...
});
});
Что-то не так с моей функцией? Я делаю это так же, как в примере документации для пакетных записей.
Я получаю эту ошибку:
Необработанная ошибка Ошибка: Update () требуется либо один объект JavaScript, либо чередующийся список пар поле / значение, за которым может следовать необязательное предварительное условие. Значение аргумента \ "dataOrField \" не является допустимым документом Firestore. Не удалось сериализовать объект типа \ "NumericIncrementTransform \" (находится в поле followNum). Firestore не поддерживает объекты JavaScript с пользовательскими прототипами (т. Е. Объекты, созданные с помощью оператора \ "new \"). \ N на WriteBatch.update (/ user_code / node_modules / firebase-admin / node_modules / @ google-cloud / firestore /build/src/write-batch.js:367:23)\n at exports.unfollowRemoveUser.functions.https.onCall (/user_code/lib/index.js:131:11)\n в / user_code / node_modules / firebase -functions / lib / provider / https.js: 330: 32 \ n на следующем (родном) \ n на /user_code/node_modules/firebase-functions/lib/providers/https.js:28:71\n на __awaiter (/ user_code / node_modules / firebase-functions / lib / provider / https.js: 24: 12) \ n at func (/user_code/node_modules/firebase-functions/lib/providers/https.js:294:32)\n at corsHandler (/user_code/node_modules/firebase-functions/lib/providers/https.js:350:44)\n at cors (/user_code/node_modules/firebase-functions/node_modules/cors/lib/index.js:188:7) \ n в /user_code/node_modules/firebase-functions/node_modules/cors/lib/index.js:224:17"*100 7 *
Я искал и пробовал все, что мог найти, но не смог решить эту проблему, я даже пытался использовать простое обновление документа, но я получаю ту же ошибку.
EDIT
Что я должен делать, когда я хочу, чтобы пакет выполнялся, только если все операции могут быть выполнены успешно. Пример:
Если у меня есть первые два обновления для документов, которые существуют, они обновят эти значения на -1, а затем две операции удаления для документов, которые не существуют, это не вызовет ошибку в моей функции (значения будут обновлены на -1 и удалить ничего не сделаю)
const batch = db.batch();
batch.update(user1DocRef, {followingNum : admin.firestore.FieldValue.increment(-1)});
batch.update(user2DocRef, {followersNum : admin.firestore.FieldValue.increment(-1)});
batch.delete(user1FollowingDocRef); //this doesn't exist
batch.delete(user2FollowersDocRef); //this doesn't exist
return batch.commit();
Но если у меня сначала есть две операции удаления для документов, которые не существуют, вся функция завершится ошибкой
const batch = db.batch();
batch.delete(user1FollowingDocRef); //this doesn't exist
batch.delete(user2FollowersDocRef); //this doesn't exist
batch.update(user1DocRef, {followingNum : admin.firestore.FieldValue.increment(-1)});
batch.update(user2DocRef, {followersNum : admin.firestore.FieldValue.increment(-1)});
return batch.commit();
Я думал, что все, что прикреплено к пакету, будет выполнено, только если все операции могут быть успешно выполнены