2017-02-06 5 views
3

Я хочу сделать компонент в Angular2, где в цикле из 50 итераций будет выполняться, и я хочу отправлять запросы GET только в четных итерациях. Теперь я хочу отправить синхронные запросы GET, так что до тех пор, пока данные с четной итерации не будут получены, цикл должен ждать и не вводить нечетную итерацию. Любые идеи о том, как это можно сделать?Синхронные запросы GET в angular2

Вот функция, написанная на службе - `

 getUser() { 
    for(let i = 1;i < 10;i++) { 
     if (i % 2 != 0) {   
     var resp =this.http.get('https://jsonplaceholder.typicode.com/users/'+i) 
      .map(res=> res.json()); 

     if(resp){ 
     resp.subscribe(res=>{ 
     console.log(res); 
     }); 
    } 

    } 
    else{ 
    console.log("even iteration"); 
    } 
} 

Вот output- And here's the output -

Я надеюсь, что проблема ясна now.The ответы должны прийти в порядке, и даже итерация консоли сообщений должен отображаться только тогда, когда его нечетный экземпляр возвращает объект. Пожалуйста, предложите решение.

+0

Запросы на синхронизацию - одна из худших вещей, которые вы можете сделать в веб-приложении, а сам угол не обеспечивает никакой поддержки. Конечно, вы можете использовать обычный способ JS, чтобы сделать это, если считаете, что вам нужно. –

+0

Ситуация требует от меня этого. Не может ли это быть достигнуто в угловом2? –

+0

Это не связано с Angular2. Просто выполните поиск, как это сделать в JavaScript, затем выполните то же самое в Angular. И нет, нет ситуации, требующей от вас этого. Есть разумные способы, но вам нужно будет предоставить больше информации о проблеме, которую вы на самом деле пытаетесь решить. –

ответ

1

Так что с помощью моего инструктора, мы, наконец, добились того, что мы wanted.We послали асинхронные запросы и возвращали ответы, наблюдаемые .Теперь мы concatented этих наблюдаемые, вернулись на итерации цикла чередовался и достигаются следующим output- output

Это мой код-

service.ts -

getUser(i: number): Observable<any>{ 
    return this.http.get('https://jsonplaceholder.typicode.com/users/' + i) 
    .map(res => res.json()); 

} 

component.ts -

import {Component, OnInit} from '@angular/core'; 
import {AppService} from "./app.service"; 
import {Observable} from 'rxjs/Rx'; 

@Component({ 
selector: 'app', 
templateUrl: './app.component.html' 
}) 
export class AppComponent implements OnInit { 


    name:string; 
    call: Observable<any>; 

    constructor(private _service: AppService) {} 

    public ngOnInit() { 

    } 

    getUser(){ 
    this.call = Observable.concat(); 
    for(let i=1;i<=10;i++) { 
    if(i%2!=0){ 
     this.call = this.call.concat(this._service.getUser(i)); 
     } 
    else{ 
     this.call = this.call.concat(Observable.create(x=> {x.next(i)}).first()); 
     } 
    } 
     this.call.subscribe(res=>console.log(res)); 

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