while循环中的异步服务

时间:2020-03-04 13:12:36

标签: javascript angular typescript asynchronous alfresco

我正在创建一个角度组件,该组件必须使用异步service获取taskId并将其作为另一个component's属性传递,以显示正确的任务。 问题是任务本身是在启动组件后不久(最多3-5秒)创建的。

下面的代码包括lastTaskId变量(存储taskId,最初为空的“”),getTaskId函数(包含getTasks service,后者依次使用taskQuery传递搜索参数)以及带有while循环的ngOnInit() 。

我的想法是使用while循环运行,直到getTaskId函数将lastTaskId变量更改为某种东西为止。无法正常工作,因为getTaskId函数似乎是异步的,并且在循环之后执行,但从未执行。

感谢您的帮助!

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 :(得分:0)

尝试实现这一点,并告诉我将会发生什么情况

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;
}