Angular - Перемещение документа пожарного депо на другую проблему с коллекцией - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь переместить документ из одной коллекции в другую, используя AngularFirestore.

В конце концов, через некоторое время я нашел рабочее решение:

    // Subscribing to original document to get data
    this.afs.collection('boards').doc(this.boardId)
            .collection('categories').doc(this.categoryId)
            .collection('taskList').doc(id)
            .valueChanges().subscribe((task: Task) => {

      // Adding a copy of document into desired category
      this.afs.collection('boards').doc(this.boardId)
              .collection('categories').doc('doneList')
              .collection('taskList').doc(id)
              .set({name: task.name, description: task.description, authorId: task.authorId, creationDate: task.creationDate,
                    lastEditorId: task.lastEditorId, lastEditDate: task.lastEditDate,
                    isApproved: taskApproved, points: task.points, completitorId: this.userId, completitionDate: new Date()});

    });

    // Deleting task in original category
    this.afs.collection('boards').doc(this.boardId)
            .collection('categories').doc(this.categoryId)
            .collection('taskList').doc(id).delete();

И оно работает, проблема в том, что при удалении исходного документа выдается ошибка:

"ERROR TypeError: Cannot read property 'name' of undefined".

Я уверен, что это вызвано удалением подписанного документа, поэтому я пытался отменить его различными способами, использовать функцию then() для обработки удаления и некоторые другие. Пока ничего не помогло.

Как мне правильно с этим справиться?

1 Ответ

0 голосов
/ 21 февраля 2020

Когда вы вызываете subscribe (), он возвращает объект Subscription, который вы должны удерживать:

subscription = this.afs.collection(...)...snapshotChanges().subscribe();

Затем вы можете использовать это для отмены подписки, когда вы больше не хотите обновлений:

subscription.unsubscribe()

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

if (task) {
    // only work with task here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...