как отловить ошибку при сбое вызова API в угловых 2 - PullRequest
0 голосов
/ 02 апреля 2019

Я разрабатываю приложение, которое сканирует QR-коды.У меня есть служба, предназначенная для сканера, где я сканирую данные.

this.dataWedge.scanResult$
      .pipe(
        tap(_ => (this.scanning = false)),
        filter(_ => this.assignState.getAssign() === this.assignState.Default),
        switchMap(scanData =>
          this.api.callApi(
            PurchaseOrderQuery,
            {
              DataString: scanData.DataString
            }
          )
        )
      )
      .subscribe(purchaseOrder => {
        this.scannedResult$.next(purchaseOrder);
      });

Проблема заключается в том, что, когда я передаю строку данных, которой нет в базе данных, происходит сбой вызова API (так какдолжно быть), но это никогда не идет в подписку.Как я могу поймать ответ об ошибке из API, когда это не удается?Это из-за switchMap может быть?

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Подписки имеют три обратных вызова:

xxx().subscribe(
  response => { ... }, // Request completed
  error => { ... }, // Request error
  () => { ... }, // Triggered in any case (like a "finally" from a try-catch block)
);

Так вы управляете ошибками.

Вы также можете поддерживать поток с помощью catchError:

xxx().pipe(
  catchError(err => of('some value')),
);

Это продолжит поток с «некоторым значением» вместо значения вашего потока.

1 голос
/ 02 апреля 2019

вот это пример

     this.dataWedge.scanResult$
     .pipe(
     tap(_ => (this.scanning = false)),
     filter(_ => this.assignState.getAssign() === this.assignState.Default),
     switchMap(scanData =>
       this.api.callApi(
        PurchaseOrderQuery,
        {
          DataString: scanData.DataString
        }
      )
     )
    )
    .subscribe(purchaseOrder => {
     this.scannedResult$.next(purchaseOrder);
    }, err {
           console.log(err); // here you will get the error if api call fails 
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...