typescript - 如何在 rxjs 中创建一个在 1 秒后抛出错误的模拟 API 调用?

标签 typescript rxjs

在这里玩代码=> https://stackblitz.com/edit/playground-rxjs-f8xjsh

你好, 我正在尝试模拟一个失败的 API 调用,它将在 subscribe() { Error: } 部分发出错误值。

import { from, of, pipe, forkJoin, interval, AsyncSubject, BehaviorSubject,defer, Subject, timer, observable, throwError } from 'rxjs';
import { concatMap, map, mergeMap, zipWith, delay, tap, concatAll, concat, concatWith, switchMap, catchError } from 'rxjs/operators';

const apiCall = (callNumber, isError=false) => of('Api Call Result ' + callNumber).pipe(
  tap(_=>console.log('Calling Api ' + callNumber)),
  delay(1000),
  tap(_=> throwError(() => new Error('ERROR')))
);

apiCall(99,true).subscribe({
  next: x=>console.log(x),
  error: e=>console.log(e)
});

目前错误没有被捕获,即被记录。 有人可以帮忙吗?

Stackblitz => https://stackblitz.com/edit/playground-rxjs-f8xjsh

最佳答案

这是一个工作示例,灵感来自 @JSmart523

const apiCall = (callNumber: number, isError = false) =>
  of('Api Call Result ' + callNumber).pipe(
    tap((_) => console.log('some log before')),
    delay(1000),
    switchMap((_) => {
      if (isError) {
        throw new Error(`ERROR`);
      } else {
        return of(_);
      }
    })
  );

apiCall(99, true).subscribe({
  next: (x) => console.log(x),
  error: (e: Error) => console.log(e.message),
});

关于typescript - 如何在 rxjs 中创建一个在 1 秒后抛出错误的模拟 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71167170/

相关文章:

c# - 如何修复组件启动时的控制台错误

rxjs - 在 map 中的 GroupedObservable 上使用订阅

angular - 如何避免 Angular 中具有相同 Observable 源的多个异步管道?

angular - 如何从 Firebase 存储中获取图像并在 Angular 2 ngFor 中显示它们

javascript - 提供者和调用页面之间的异步操作架构

angular - 使用 [...parent.path !] 意味着什么。这?

typescript - 如何禁用 eslint no-promise-executor-return?

typescript - Angular 2 |订阅 Observables

angular - Subscription add函数与Promise的resolve回调做什么

javascript - RxJS:处理 cycle.js 自定义驱动程序中的错误