Асинхронный сервис в цикле while - PullRequest
0 голосов
/ 04 марта 2020

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

Приведенный ниже код включает в себя переменную lastTaskId (сохраняющую taskId, изначально пустую ""), функцию getTaskId (содержит сервис getTasks
, который, в свою очередь, использует taskQuery для передачи параметров поиска) и ngOnInit () с некоторым временем l oop внутри.

Моя идея состояла в том, чтобы использовать функцию while l oop, пока функция getTaskId не изменит переменную lastTaskId на что-то другое. Не сработало, потому что кажется, что функция getTaskId является асинхронной и выполняется после l oop, что никогда не происходит.

Спасибо за любую помощь!

lastTaskId: string = "";

ngOnInit() {
  while (this.lastTaskId == "") {
    this.getTaskId();
  }
}

getTaskId() {
  const taskQuery: TaskQueryRequestRepresentationModel = {
    processInstanceId: 1,
    state: 'open',
  };

this.tasklistService.getTasks(taskQuery).subscribe((taskListModel: TaskListModel) => {
  this.lastTaskId = taskListModel.data[0].id;
}, error => {
  console.log('Error: ', error);
});}

1 Ответ

0 голосов
/ 04 марта 2020

Попробуйте реализовать это и скажите, что произойдет

lastTaskId: string = "";
async ngOnInit() {
    await this.getTaskId();

}

async getTaskId() {
    const taskQuery: TaskQueryRequestRepresentationModel = {
        processInstanceId: 1,
        state: 'open',
    };
    const taskListModel = await this.tasklistService.getTasks(taskQuery).toPromise();
    this.lastTaskId = taskListModel.data[0].id;
}
...