WriteBatch.update () Firestore не будет принимать AngularFirestoreDocument от angularfirestore2 - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь сделать пакетную запись с помощью WriteBatch Firestore.Я пытаюсь добавить обновления в WriteBatch, и для этого требуется DocumentReference.У меня есть AngularFirestoreDocument и я не могу понять, как привести его к DocumentReference и заставить его скомпилировать или запустить правильно.

Я пытался привести его к любому неизвестному объекту DocumentReference и использовать AngularFirestoreDocument как есть.

export class FinancialService {
    private transCollection: AngularFirestoreCollection<Transaction>;

    batch_update_trans(trans) {
        let writer = this.afs.firestore.batch();
        this.transCollection = this.afs.collection<Transaction>('balance_sheets/'+this.balance_sheet_id+"/transactions/");
        for (let t of trans) {
          writer.update(this.transCollection.doc(id),t);
        }
        return writer.commit();
    }
}

, если я включаю AngularFirestoreDocument, как указано выше, я получаю время компиляцииошибка: ошибка TS2345: Аргумент типа «AngularFirestoreDocument <{}>» не может быть назначен параметру типа «DocumentReference».Типу AngularFirestoreDocument <{}> 'не хватает следующих свойств из типа «DocumentReference»: id, firestore, parent, path и еще 2.

Если я приведу AngularFirestoreDocument к DocumentReference: writer.update(<DocumentReference>this.transCollection.doc(id),t);

Я получаю эту ошибку времени компиляции: ошибка TS2352: преобразование типа 'AngularFirestoreDocument <{}>' в тип "DocumentReference" может быть ошибкой, поскольку ни один тип не совпадает в достаточной степени с другим.Если это было сделано намеренно, сначала преобразуйте выражение в «неизвестное».Типу AngularFirestoreDocument <{}> 'не хватает следующих свойств из типа «DocumentReference»: id, firestore, parent, path и еще 2

Если я приведу AngularFirestoreDocument к DocumentReference к unknown: writer.update(<unknown> this.transCollection.doc(id),t);Он не скомпилируется с этой ошибкой: ошибка TS2345: Аргумент типа «неизвестно» не может быть назначен параметру типа «DocumentReference».

Если я приведу AngularFirestoreDocument к DocumentReference к любому: writer.update(<any> this.transCollection.doc(id),t);, он делаеткомпилируется, но я получаю ошибку времени выполнения, когда пытаюсь перейти на пакетное обновление документов следующим образом: Uncaught (в обещании): FirebaseError: [code = invalid-аргумент]: функция WriteBatch.update () требует, чтобы ее первый аргумент был DocumentReference, ноэто было: объект FirebaseError: Функция WriteBatch.update () требует, чтобы его первый аргумент был DocumentReference, но это был: объект

Я ожидал, что код скомпилируется и успешно выполнит пакетное обновление документов транзакций.

1 Ответ

0 голосов
/ 01 июля 2019

ОК, я понял, как это сделать, используя эту действительно полезную статью, в которой содержится много документации, которой нет у angularfire2: Расширенное использование Firestore: angularfire - atomic write

Вы можете получить доступ к API javascript через модуль firestore angularfire2 и создать DocumentRef через этот API вместо использования типа AngularFirestoreDocument angularfire2.

Рабочий код выглядит следующим образом:

export class FinancialService {

    batch_update_trans(trans) {
        let writer = this.afs.firestore.batch();
        let transDoc = null;
        for (let t of trans) {
          transDoc = this.afs.firestore.doc(
             'balance_sheets/'+this.balance_sheet_id+"/transactions/"+t.id);
          writer.update(transDoc,t);
        }
        return writer.commit();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...