使用`Observable`代替`$ q.all`

时间:2018-05-02 08:21:41

标签: javascript angular

您好我有一个现有的Angular 1.6.x项目,其中我做过像

这样的事情
var defer1 = $q.defer();
        var defer2 = $q.defer();
        $http.get(refTrustUrl).then(function (res) {
            // some code here
            defer1.resolve(true)
        }, function () {
        });
        $http.get(candTrustUrl).then(function (res) {
            // some code here
            defer2.resolve(true)
        }, function () {
        });


        $q.all([defer1.promise, defer2.promise]).then(function () {
            // some code here
        })

现在我必须将此项目迁移到Angular 4/5Observable中是否有任何解决方法与$q.all的功能相匹配。 注意:我读到了Observable.forkJoin,但没有找到 我做了类似的事情:

 Observable.forkJoin(
  this.http.get(refTrustUrl, {responseType: 'text'}),
  this.http.get(candTrustUrl, {responseType: 'text'})
   ).subscribe(
  data=>{
    console.log(data,1)
  }
)

但它没有用。 请帮助thanx ... 我提到这个link来研究forkJoin

1 个答案:

答案 0 :(得分:1)

您的代码应该是这样的(来自您提供的链接)。

Observable.forkJoin(
    this.http.get(refTrustUrl).map((res:Response) => res.json()),
    this.http.get(candTrustUrl).map((res:Response) => res.json())
).subscribe(
  data => {
    this.refTrust = data[0]
    this.candTrust = data[1]
  },
  err => console.error(err)
);

你可以试试这个吗?如果它有用吗?。

而且你也不需要像这样订阅流内部。

Observable.forkJoin(
  this.http.get(refTrustUrl, {responseType: 'text'})
    .subscribe(res => {

当您完成所有转换后,您应该在结束时订阅。