在执行更多代码之前如何等待可观察对象更新?

How do I wait for an observable to update before executing more code?

我认为 observable 可能不适合在这里使用,但我不确定我还能使用什么来向另一个变量值提供实时更新 class。

我在服务中有这个循环class

elements.forEach(element => {
  doStuff();
  this.numberSubject.next(valueFromDoStuff);
})

并在我的组件中订阅了 observable class

numberSubjectObservable.subscribe(result => {
  this.value = result
}

我想要的是能够暂停循环,直到我的 Angular 组件更新为来自订阅的最新值,但现在它会等到结束才呈现最终值。

不确定我是否完全理解您在这里尝试做什么,但如果您需要等待 this.value 等于 numberSubjectObservable 结果,您可以使用异步方法并尝试以下操作

你可以改变这个

numberSubjectObservable.subscribe(result => {
  this.value = result
}

至此

this.value = await numberSubjectObservable.toPromise();

不确定您的 doStuff() 是同步的还是异步的。 如果是同步,你在进度条中看不到任何更新,因为变化是瞬间发生的,所以你只能看到最终值。

万一它是异步的,首先你必须忘记forEach,它

我已经为你准备了一份demo。第一个按钮触发同步迭代。第二个按钮触发异步迭代。

伪造一个异步 doStuff:

private async asyncDoStuff(element: number): Promise<number>{
  console.log('running async doStuff with element: ' + element);
  return new Promise(resolve => {
   setTimeout(resolve, 1000);
  }).then(()=>{return this.doStuff(element);});
}

并循环遍历您的数组以查看延迟 1 秒的更新:

public async asyncIterate(){
  let newElement = 0;
  for (const element of this.elements){
  newElement = await this.asyncDoStuff(element);
  console.log('newElement: ' + newElement);
  this.numberAsyncSubject.next(newElement);
  }
}