q.all 用于 angular2 observables

Posted

技术标签:

【中文标题】q.all 用于 angular2 observables【英文标题】:q.all for angular2 observables 【发布时间】:2016-09-07 09:54:42 【问题描述】:

有没有像 q.all 这样的东西来解决 angular2 中的所有 http api 请求?

在 angular1 中,我可以这样做:

var promises = [api.getA(),api.getB()];
$q.all(promises).then(function(response)
    // response[0]  --> A
    // response[1]  --> B
)

angular2中http模块返回Observable,

api.getA().subscribe(A => A)
api.getB().subscribe(B => B)

但是我想把A和B一起解决,然后做点什么。

【问题讨论】:

【参考方案1】:

你需要.forkJoin 操作符

Observable.forkJoin([observable1,observable2])
       .subscribe((response) => 
          console.log(response[0], response[1]);
       );

你可以用;导入Observable

import Observable from 'rxjs/Rx';

【讨论】:

您是否还知道 $q.all() 调用的其他变体的 RXJS 解决方案,您可以在其中传递对象而不是数组?这是一种更优雅的方法,因为您以后可以通过名称而不是索引来处理 Promise。【参考方案2】:

角度

import Observable from 'rxjs/Observable';
    ...
    return Observable.forkJoin(
        this.http.get('someurl'),
        this.http.get('someotherurl'));

角度 >= 6:

import forkJoin from 'rxjs';
...
return forkJoin(
    this.http.get('someurl'),
    this.http.get('someotherurl'));

【讨论】:

以上是关于q.all 用于 angular2 observables的主要内容,如果未能解决你的问题,请参考以下文章

在 RxJS Observable 中“展平”数组的最佳方法

为啥,如果 `$q.all` 没有返回一个 promise 数组,那么不会抛出异常?

在 Jscript 中为 Q.all() 构建动态函数数组

带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析

AngularJS $q 和 $q.all 单个数据源和多个数据源合并(promise的说明)

Angular2 formControl用于选择多个