Angular 等待 ngOnInit 中调用的可观察方法完成以继续执行

Angular wait for observable method called in ngOnInit to finish to continue execution

提问人:user20565161 提问时间:7/14/2023 更新时间:7/14/2023 访问量:147

问:

我在ngOnInit中调用了一个方法,它设置了一个布尔标志。如果此标志为 true,我将继续进行验证。但是,该标志仍为 false,因为该方法是在之后调用的。 请问如何处理?

  ngOnInit(){
     this.hasDependent();
   
    if(this.hasAnyDependent(){
     //continue logic
   }
  } 

  hasDependent(){
   this.employeeService.hasDep(null).sub 
 scribe(
   (data) => {
     this.hasAnyDependent = data;
    }
    err => toast.error("Error")

  )

   }
Angular TypeScript 异步

评论

0赞 DeborahK 7/14/2023
如果您使用的是 Angular v16,则可以使用新的信号功能定义布尔标志。然后使用计算或效果对信号的变化做出反应。对于旧版本的 Angular,您可以使用 Subject 或 BehaviorSubject 作为布尔值。然后,您可以对排放做出反应。

答:

0赞 jagmitg 7/14/2023 #1

这是一个异步操作 - 该函数调用返回可观察对象的服务方法。hasDependent()hasDep()

因此,当您调用 时,这将在订阅返回之前执行,因此尚未设置。if(this.hasAnyDependent())hasAnyDependent

我建议使用 RxJS 和 hasAnyDependent' 标志。pipe()tap() functions to handle the side effect of setting

示例如下

ngOnInit(){
  this.hasDependent().subscribe(hasDep => {
    if(hasDep) {
      // continue logic
    }
  }, 
  err => toast.error("Error"));
} 

hasDependent(): Observable<boolean>{
  return this.employeeService.hasDep(null).pipe(
    tap((data) => {
      this.hasAnyDependent = data;
    }),
    first()
  );
}