RuntimeException не требует компиляции try или catch в начале метода. Просто потому, что это происходит во время выполнения, например, вы хотите передать 14-й элемент массива длиной 10 элементов или получить исключение NullPointerException, потому что вы забыли установить значение чего-то, эти случаи не могут быть предсказаны, так как программа будет хорошо работать с правильными структурами. Также, как говорят другие, это не проверено.
Исключение отличается, вы должны сказать программе, что делать с известными случаями исключения. Это означает, что complier заставит вас обработать исключение так или иначе, прежде чем он начнет работать.
Я написал этот маленький скрипт, который использует пакетные записи (макс. 500) и записывает только одну партию за другой.
использовать его, сначала создавая batchWorker let batch: any = new FbBatchWorker(db);
Затем добавьте что-нибудь к рабочему batch.set(ref.doc(docId), MyObject);
. И закончите его через batch.commit()
. Api такой же, как для обычной Firestore Batch ( https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes ) Однако в настоящее время он поддерживает только set
.
import {firestore} from "firebase-admin";
export default class FbBatchWorker {
db: firestore.Firestore;
batchList: FirebaseFirestore.WriteBatch[] = [];
elemCount: number = 0;
constructor(db: firestore.Firestore) {
this.db = db;
this.batchList.push(this.db.batch());
}
async commit(): Promise<any> {
let batchProms: Promise<any>[] = [];
for (let _batch of this.batchList) {
(await _batch.commit());
console.log("finished writing batch");
// batchProms.push(_batch.commit());
}
// return Promise.all(batchProms);
return Promise.resolve("yeah");
}
set(dbref: FirebaseFirestore.DocumentReference, data: any): void {
this.elemCount = this.elemCount + 1;
if (this.elemCount % 490 === 0) {
this.batchList.push(this.db.batch());
}
this.batchList[this.batchList.length - 1].set(dbref, data);
}
}
Firestore имеет пределы.
Вероятно, «Deadline Exceeded» происходит из-за его пределов.
См. это. https://firebase.google.com/docs/firestore/quotas
Максимальная скорость записи в документ 1 в секунду
blockquote>https://groups.google.com/forum/#!msg/google-cloud-firestore-discuss/tGaZpTWQ7tQ/NdaDGRAzBgAJ