2016-06-15 3 views
2

с обещанием JS библиотеки (https://github.com/stackp/promisejs) Я могу сделать это:Angular2: Как сделать несколько запросов GET сразу

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

Теперь мне нужно сделать это с Angular2. Таким образом, я сделал сервис с методами getSettings, getTranslations и т. Д. - но как мне это сделать: join в компоненте, который использует эту услугу?

(И присоединиться к ним таким образом, что, когда и только тогда, когда все запросы закончить? - Я побегу функциональность, которая использует все ответы)

ответ

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]); 
    }); 
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) 
     ); 

} 
Смежные вопросы