Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular RxJS-使用可观测的错误块_Angular_Rxjs - Fatal编程技术网

Angular RxJS-使用可观测的错误块

Angular RxJS-使用可观测的错误块,angular,rxjs,Angular,Rxjs,我有两个服务budgettsetservice和budgettservice,当有错误时我需要使用budgettsetservice,当没有错误时我需要使用budgettservice。未调用budgetTestService.getbudgettservice()管道中的map()-console.log('testservice complete') 不确定这是不是应该这样做,好像我在嵌套,做得不对,我使用的语法正确吗 this.budgetService.getBudgetDays(thi

我有两个服务
budgettsetservice
budgettservice
,当有错误时我需要使用budgettsetservice,当没有错误时我需要使用budgettservice。未调用
budgetTestService.getbudgettservice()
管道中的map()-
console.log('testservice complete')

不确定这是不是应该这样做,好像我在嵌套,做得不对,我使用的语法正确吗

this.budgetService.getBudgetDays(this.startDate, this.finishDate)
    .pipe(
      map(res => {
        console.log('get budget day server mapping');
        self.timelineBudgetDates = self.processDates(res);

      }),
      //map(res => {
      //  self.timelineBudgetDates = self.budgetTestService.getBudgetDates(self.startDate, self.finishDate);
      //})
      catchError(error => {
        console.log('error code running');
        console.log(error);
        self.budgetTestService.getBudgetDates(self.startDate, self.finishDate)
                              .pipe(
                                map(res => {
                                  console.log('test service complete');
                                  console.log(res);
                                  self.timelineBudgetDates = res;
                                })
                              );
        return of('some return value, maybe null, maybe a good default');
      })
    )

    .subscribe(res => {
      console.log('Response = ', res);
      //self.timelineBudgetDates = self.processDates(res);
      //self.timelineBudgetDates = res;

    });
budgetTestService

getBudgetDates(startDate: string, endDate: string): Observable<BudgetDate[]> {

    console.log('getting budget dates from test service');

    let dates = this.datesOfRange(moment(startDate), moment(endDate));
    //console.log('dates:', dates);

    let budgetDates: BudgetDate[] = [
      new BudgetDate({ moment: moment().subtract(1, 'd').startOf('d'), earned: 100, spent: 50, onServer: true }),
      new BudgetDate({ moment: moment().subtract(2, 'd').startOf('d'), earned: 101, spent: 51, onServer: true }),
      new BudgetDate({ moment: moment().subtract(3, 'd').startOf('d'), earned: 102, spent: 52, onServer: true }),
      new BudgetDate({ moment: moment().subtract(4, 'd').startOf('d'), earned: 103, spent: 53, onServer: true })
    ];

    const mockResults = function(observer: Observer<BudgetDate[]>) {
      observer.next(budgetDates);
      observer.error('...');
      observer.complete;
    };
    const update = new Observable(mockResults).pipe(
      catchError((error: any) => Observable.throw(error))
    );
    return update;
  }

RxJS可观察链只有在订阅时才会执行。因此,不包括
测试服务完成
的输出背后的问题是,您从未订阅测试服务调用。特别是在这里:

catchError(错误=>{
self.budgetTestService.getBudgetDates(self.startDate、self.finishDate)
.烟斗(
// ...
);
//在这里返回其他可观察到的
返回('some return value,可能为null,可能为良好的默认值');
})
// ...
.subscribe(console.log)
这里您调用了
budgetTestService
,但它的可观察对象从未订阅过。 将其与:

catchError(错误=>{
返回self.budgetTestService.getBudgetDates(self.startDate、self.finishDate)
.烟斗(
// ...
);
})
// ...
.subscribe(console.log)
在后一个代码示例中,我们从
budgetTestService
返回observable,它将成为订阅链的一部分

请在此处选中此小示例进行比较:


希望这有帮助

您需要先调用什么来检测成功/错误?
error code running
HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: null, ok: false, …}
getting budget dates from test service
Response =  some return value, maybe null, maybe a good default