Angular Firestore - поиск и обновление одного документа - PullRequest
0 голосов
/ 05 октября 2019

Я новичок в сети (и все асинхронно). Я пытаюсь завершить двухэтапный процесс в приложении Angular + Firebase:

  1. Запросить коллекцию Firestore, чтобы найти идентификатор документа, который соответствует фильтру (name == 'theName').
  2. Используйте идентификатор для обновления документа.

Я из встроенного мира, где я могу сделать что-то подобное (контекст приложения - я пытаюсьотслеживать результаты в соревнованиях по боевой робототехнике).

// Update the winning robot's doc with results

// Find the ID of the robot we're looking for (ex. winningRobotName = "Some Name")
this.firestore.collection('robots', ref => ref.where('name', '==', winningRobotName)).snapshotChanges()
  .subscribe(data => {
    this.bots = data.map(e => {
      return {
        id: e.payload.doc.id,
        name: e.payload.doc.data()['name'],
        // other fields
      } as Robot;
   })
});

let robot = this.bots[0];  <--------- This doesn't work because I reach here before the above call returns.

// Update this robot with new fields
this.firestore.doc('robots/' + robot.id)
  .update({
    fightCount : robot.fightCount + 1,
    winCount : robot.winCount + 1,
    // other updates
  });

Как ждать возврата одной подписки перед выполнением другой команды? Вы вкладываете подписки? Есть что-то действительно простое, о чем я просто еще не знаю?

Спасибо.

1 Ответ

0 голосов
/ 05 октября 2019

Я не думаю, что AngularFire поможет вам в этом, и вместо этого сделал бы это непосредственно на обычном JavaScript SDK:

ref.where('name', '==', winningRobotName))
   .get()
   .then((snapshots) => {
     snapshots.forEach((doc) => 
       doc.ref.update({
         id: doc.id,
         name: doc.data().name
       })
   })
})

Я не совсем уверен, что name: doc.data().name должен делать (какэто операция идентификации, которая дает тот же результат, что и входные данные, но оставила ее на всякий случай, если это имеет значение для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...