Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.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
Typescript angular2 rxjs可观测分叉连接_Typescript_Angular_Rxjs_Observable - Fatal编程技术网

Typescript angular2 rxjs可观测分叉连接

Typescript angular2 rxjs可观测分叉连接,typescript,angular,rxjs,observable,Typescript,Angular,Rxjs,Observable,即使其中一个请求失败,也可以继续forkjoin http.get请求 我正在寻找一个类似的函数$q.allSettled in angular2 见示例: Kab使用Observable.forkJoin()运行多个并发http.get()请求。 如果任何单个请求失败,整个操作将导致错误状态 getBooksAndMovies() { return Observable.forkJoin( this.http.get('/app/books.json').map((res

即使其中一个请求失败,也可以继续forkjoin http.get请求

我正在寻找一个类似的函数$q.allSettled in angular2

见示例:

Kab使用Observable.forkJoin()运行多个并发http.get()请求。 如果任何单个请求失败,整个操作将导致错误状态

 getBooksAndMovies() {
    return Observable.forkJoin(
      this.http.get('/app/books.json').map((res:Response) => res.json()),
      this.http.get('/app/movies.json').map((res:Response) => res.json())
    );
但您可以将额外的GET请求放入错误处理程序:

getBooksAndMovies() {
    Observable.forkJoin(
        this.http.get('/app/books.json').map((res:Response) => res.json()),
        this.http.get('/app/movies.json').map((res:Response) => res.json())
    ).subscribe(
      data => {
        this.books = data[0]
        this.movies = data[1]
      },
      err => console.error(err)
    );

在这种情况下,您可以利用每个可观察对象的
catch
操作符截取错误并返回另一个可观察对象

以下是一个示例:

return Observable.forkJoin(
  this.http.get('/some-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
  this.http.get('/some-other-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
);

感谢您的回复,您能提供一个例子吗?向下投票,因为这并不能解决OPs的问题,即如果其中一个请求失败,如何继续请求。forkJoin是等待未失败的请求完成,还是立即自行失败?@AngJobs是否有办法处理每个数组元素的错误?我需要用失败的特定元素的错误消息更新UI。我在res:块之后添加了一个(err)=>{},但它只是跳到了整个数组的最终失败处。对just return empty()或使用rxjs filter()返回null\undefined\{}非常烦人,但是empty()或filter()不使用forkJoin,因为需要“要求所有源观测值至少发出一个值”,如中所述。遗憾的是,在2020年使用“这种”方法
return Observable.forkJoin(
  this.http.get('/some-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
  this.http.get('/some-other-url')
         .map((res:Response) => res.json())
         .catch(res:Response => Observable.of({}),
);