Javascript while循环中的异步服务

Javascript while循环中的异步服务,javascript,angular,typescript,asynchronous,alfresco,Javascript,Angular,Typescript,Asynchronous,Alfresco,我正在创建一个角度组件,它必须使用异步方法获取taskId,并将其作为另一个属性传递,以显示正确的任务。 问题是任务本身是在我的组件启动后不久(最多3-5秒)创建的。 下面的代码包括lastTaskId变量(存储taskId,最初为空“”)、getTaskKid函数(包含getTask,它反过来使用taskQuery传递搜索参数)和内部带有while循环的ngOnInit()。 我的想法是使用while循环运行,直到getTaskId函数将lastTaskId变量更改为其他变量。因为getT

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

下面的代码包括lastTaskId变量(存储taskId,最初为空“”)、getTaskKid函数(包含getTask,它反过来使用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);
});}

试着实现这个,告诉我会发生什么

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

“我的想法是使用while循环,直到getTaskId函数将lastTaskId变量更改为某个值为止。”这并不能解释为什么尝试使用while循环。当您想多次重复同一条指令时,会使用循环。您想实现什么?在
lastTaskId
有值之前,是否试图阻止显示子组件?还是在等待服务器返回值?我想在任务创建后立即显示它。while循环的要点是等待它被创建。@dzider但是为什么要等待呢?这取决于什么?整个过程是关于启动一个流程并立即完成几个任务。用户在第一个对话框中启动一个进程。此对话框关闭,包含此进程任务的第二个对话框立即打开。我必须等待任务,因为启动流程和创建任务不会同时发生。任务在第二个对话框打开后不久创建。延迟是个问题。为什么把一个可观察的转换成承诺能解决任何问题?这在功能上与问题相同,只是没有无意义的循环。因此,您可以等待得到响应,并且您可以在模板中使用*ngIf=“lastTaskId”这样的*ngIf指令,这种方式比生成loopcore更清晰。js:15724错误:Uncaught(承诺中):TypeError:无法读取未定义TypeError的属性“id”:无法读取未定义TypeError的属性“id”。我认为这是因为任务尚未创建。这就是我首先考虑while循环的原因。您能记录taskListModel以查看响应吗?@dzider您检查过对象结构是否符合预期吗