【问题标题】:Call Another Method After Completing An Observable在完成一个 Observable 后调用另一个方法
【发布时间】:2021-12-24 04:11:12
【问题描述】:

我已经被一个问题困住了一段时间了。我有一个 API,它有一个名为“actuals”的端点,并以 JSON 格式返回性能列表(自定义对象)。由于它的异步特性,我订阅了一个 Observable。还有另一种称为 calculateCosts 的方法依赖于此数据,因此我只想在可观察对象完成后触发此方法。

我的组件的精简纲要:

export class ProjectDetailComponent implements OnInit
{
    performances: Performance[] = [];

    constructor(
        private activatedRoute: ActivatedRoute,
        private performanceService: PerformanceService
      ) { }

    ngOnInit(): void 
    {
      // Fetch data
      this.fetchPerformances();
    }

    fetchPerformances()
    {
      this.performanceService.getActuals().pipe(
        finalize(() => this.calculateCosts))
        .subscribe(data => {
          data.forEach(p =>
          {
            let performance = new Performance(
              p['timesheetCodeId'],
              p['firstName'],
              p['lastName'],
              p['timesheetCodeName'],
              p['actualHours']
          );
          
          this.performances.push(performance);
        })
      });
    }
  }

  calculateCosts()
  {
    console.log(this.performances);
  }
}


我已经能够通过在 subscribe() 本身和 finalize() 中将性能数组记录到控制台来确认 Observable 确实返回了有效数据。但是,calculateCosts 永远不会被解雇(应该记录性能),我不明白为什么。

谁能帮我指引正确的方向?

谢谢。

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    当 observable 完成时,你没有调用函数:

    finalize(() => this.calculateCosts))
    

    改成:

    finalize(() => this.calculateCosts()))
    

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2021-02-19
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多