Angular2:如何一次发出几个GET请求

时间:2016-06-15 07:39:07

标签: ajax http angular promise

使用promise JS库(https://github.com/stackp/promisejs)我可以做到这一点:

promise.join([
    promise.get('/settings'),
    promise.get('/translations'),
    promise.get('/main-data')
]).then(function(results) {
    console.log(results);
});

现在我需要使用Angular2。所以我使用方法getSettingsgetTranslations等提供了服务 - 但是如何在使用此服务的组件中join呢?

(并以这样的方式加入他们,当且仅当所有请求完成时 - 我将运行使用所有响应的功能?)

2 个答案:

答案 0 :(得分:6)

您可以使用forkJoin运算符

import {Observable} from 'rxjs/Rx';



//...some code

 Observable.forkJoin( 
    this.http.get('/settings').map((res:Response) => res.json()),
    this.http.get('/translations').map((res:Response) => res.json())
  )
  .subscribe(data => {
    console.log(data[0], data[1]);
  });

答案 1 :(得分:0)

答案并没有解决问题,主要是因为我不了解如何获取数据in组件。但它仍然指导我很好:)

所以,这是最终的代码:

// Service - "AppService.ts":
import {Observable} from 'rxjs/Rx';

export class AppService {

    getAllData() {
        return Observable
            .forkJoin(
                this._http.get('/settings').map(res => res.json()),
                this._http.get('/translations').map(res => res.json())
            )
    }

}

// Component - "AppComponent.ts":
import {AppService} from './app.service';

export class AppComponent {

    AllData = {};

    appService
        .getAllData()
        .subscribe(
            data => {
                console.log('Responses from AJAX:');
                console.log(data);
                this.AllData = JSON.stringify(data)
            },
            error => alert(error)
        );

}