angular2

时间:2017-02-06 12:42:25

标签: api http angular get synchronous

我想在Angular2中创建一个组件,其中将执行50次迭代的循环,并且我只想在偶数迭代中发送GET请求。现在我想发送同步GET请求,这样除非并且直到没有收到来自偶数迭代的数据,否则循环应该等待而不是进入奇数迭代。关于如何做到这一点的任何想法?

这里是服务中写的函数 - “

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

这是输出 - And here's the output -

我希望问题现在很清楚。响应应该按顺序排列,偶数迭代控制台消息只有在其奇数对应物返回对象时才会显示。请提出解决方案。

1 个答案:

答案 0 :(得分:1)

所以在我的讲师的帮助下,我们终于达到了我们想要的效果。我们发送异步请求并将响应作为可观察对象返回。现在我们连接这些可观察对象,在交替循环迭代时返回并实现以下输出 - {{3} }

这是我的代码 -

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

    }
  }