Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api angular2中的同步GET请求_Api_Http_Angular_Get_Synchronous - Fatal编程技术网

Api angular2中的同步GET请求

Api angular2中的同步GET请求,api,http,angular,get,synchronous,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('h

我想在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");
  }
}
getUser(){
for(设i=1;i<10;i++){
如果(i%2!=0){
var resp=this.http.get('https://jsonplaceholder.typicode.com/users/"(i)
.map(res=>res.json());
如果(resp){
分别订阅(res=>{
控制台日志(res);
});
}
}
否则{
log(“偶数迭代”);
}
}
这是输出-


我希望问题现在清楚了。响应应该是有序的,偶数迭代控制台消息应该只在奇数对应方返回对象时才显示。请建议解决方案。

因此,在我的指导老师的帮助下,我们终于实现了我们想要的。我们发送了异步请求,并将响应作为ob返回可维护性。现在,我们将这些可观察性关联起来,在交替循环迭代中返回,并获得以下输出-

这是我的密码-

service.ts-

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

 }
getUser(i:number):可观察{
返回此.http.get('https://jsonplaceholder.typicode.com/users/"(i)
.map(res=>res.json());
}
组件技术-

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

    }
  }
从'@angular/core'导入{Component,OnInit};
从“/app.service”导入{AppService};
从'rxjs/Rx'导入{Observable};
@组成部分({
选择器:“应用程序”,
templateUrl:“./app.component.html”
})
导出类AppComponent实现OnInit{
名称:字符串;
呼叫:可观察;
构造函数(私有_服务:AppService){}
公共ngOnInit(){
}
getUser(){
this.call=Observable.concat();
for(设i=1;i{x.next(i)}).first();
}
}
this.call.subscribe(res=>console.log(res));
}
}

同步请求是web应用程序中最糟糕的事情之一,Angular本身不提供任何支持。当然,如果你认为必须的话,你也可以用普通的JS方式来做。这种情况需要我这样做。这在angular2中是不可能实现的吗?这与angular2无关。只需在JavaScript中搜索如何执行,然后在Angular中执行同样的操作。不,没有任何情况需要你这么做。有很多合理的方法,但你需要提供更多关于你实际试图解决的问题的信息。因此,如果我通过异步请求而不是同步请求来解决上述问题,它会给我同样的结果吗?对不起,我是初学者,所以我知道的不多。您可能会以不同的方式编写代码,但这是可能的。但我不知道你想解决什么问题。请分享演示您尝试实现的代码。