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



在此处播放代码=>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)
});

当前未捕获错误,即记录错误。有人能帮忙吗?

Stacklitz=>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),
});

tap执行该函数,然后发出它接收到的任何内容,保持不变。

CCD_ 2是一个返回可观测值的函数。

因此,如果x是,则someObservable.pipe(x)将返回一个发出错误的可观测值

  • map(() => { throw new Error('msg') })

  • switchMap(() => throwError('msg'))

。。。或者你可以简单地用throwError('msg'))创建一个新的可观察对象,而不需要管道传输任何东西。。。

但CCD_ 8任何CCD_ 9都不会改变可观测到的发射。

最新更新