【问题标题】:Handler exception in a forkjoing with Ionic 2 and Angular 4使用 Ionic 2 和 Angular 4 进行分叉时的处理程序异常
【发布时间】:2023-04-03 09:14:01
【问题描述】:

是否可以使用 forkjoin 单独处理错误?我需要同时调用多个请求,在调用请求时在屏幕上显示加载。如果某个请求发生错误,另一个成功,我需要将请求成功显示在屏幕上,并将错误消息显示给另一个。

Meu código no Page.ts:

getData(){
   this.loadingService.showLoader("Loading, please wait");

   Observable.forkJoin([
      this.issuesService.getIssues(),
      this.categoryService.getCaretories()
    ]).subscribe(
      (response) => {

        let issues = JSON.parse((response[0] as any)._body);
        let categories = JSON.parse((response[1] as any)._body);

        //do something with issues and categories

      }, (error) => {
        console.log(`Backend returned error was: ${error}`);
        this.closeLoading(refresher);
        this.showContent = false;
      }, () => {
        console.log('complete all request');
        this.closeLoading(refresher);
      });
  }
}

如果在Issues请求中发生错误,在Category请求中,返回成功。我需要在屏幕上显示如何成功categories,并显示Issues的错误消息。

目前,当发生错误时,会为所有请求显示错误消息。

【问题讨论】:

  • 你的意思是每次请求都显示错误?
  • @SurajRao 并不是真正的骗子,因为它没有解释如何将错误与实际值区分开来。但相关,是的。
  • @estus 这两个问题都要求同样的事情。如果您在谈论答案...我想您可以在此处或在欺骗目标中添加其他信息。
  • @SurajRao 但重复的问题没有“答案”。而且我之前看到过重复,我试图按照他们的建议解决它,但没有奏效。

标签: angular ionic2


【解决方案1】:

RxJS forkJoin 的工作方式与 Promise.all 类似。如果其中一个源抛出错误,则生成的源也会抛出。如果它不应该抛出,则应该在抛出它的源中捕获错误:

Observable.forkJoin(
  this.issuesService.getIssues().catch(err => Observable.of(err)),
  this.categoryService.getCaretories().catch(err => Observable.of(err))
)

然后可以像处理常规值一样处理错误:

  .subscribe(([issuesRes, categoriesRes]) => {
    if (issuesRes instanceof Error) ...
    else ...
  });

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 2018-01-23
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多