Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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
Angular 从http.get获取数据并将其应用于对象_Angular_Typescript_Ionic Framework - Fatal编程技术网

Angular 从http.get获取数据并将其应用于对象

Angular 从http.get获取数据并将其应用于对象,angular,typescript,ionic-framework,Angular,Typescript,Ionic Framework,当我运行这段代码时,我得到了一个充满数据的desciplines数组 onGetDescs(descipline:string){ let rep =this.http.get("http://data"); let result: any; rep.subscribe( data => { this.desciplines = data as Descipline[]; result = this.descip

当我运行这段代码时,我得到了一个充满数据的desciplines数组

 onGetDescs(descipline:string){
    let rep  =this.http.get("http://data");
    let result: any;
    rep.subscribe( data => {
      this.desciplines = data as Descipline[];
        result =  this.desciplines.filter(function(d) {
        return d.name === descipline;
      });
      this.desciplines = result as Descipline[];
      console.log(this.desciplines);
    });  

    
     return this.desciplines;
  }
但是当我跑步的时候,我想和它一起工作,或者只是做这个

  onGetDescs(descipline:string){
    let rep  =this.http.get("http://45.80.149.82:8080/ctp-api/api/disciplines");
    let result: any;
    rep.subscribe( data => {
      this.desciplines = data as Descipline[];
      result =  this.desciplines.filter(function(d) {
      return d.nom === descipline;
      });
      this.desciplines = result as Descipline[];
    });  

    console.log(this.desciplines);

     return this.desciplines;
  }
我得到一个空数组


我真的需要知道发生了什么ps:我对angular不太熟悉,这两个片段之间的区别可能在于下载规程数据所花费的时间

您需要知道传递给subscribe方法的函数将在数据下载后执行,但它不会阻止执行,因此在运行rep.subscribe(…)后,下一条语句(返回this.desciplines;)实际上会立即执行,返回前没有给数组足够的加载时间


这里您需要做的是重新思考您的逻辑,以便您希望通过规程数据实现的所需行为进入subscribe方法。

这两个片段之间的差异可能是规程数据下载所需的时间

您需要知道传递给subscribe方法的函数将在数据下载后执行,但它不会阻止执行,因此在运行rep.subscribe(…)后,下一条语句(返回this.desciplines;)实际上会立即执行,返回前没有给数组足够的加载时间


这里需要做的是重新思考您的逻辑,以便您希望通过规程数据实现的所需行为进入subscribe方法。

在第一个示例中,您在api调用将数据发送回后打印数据。(异步操作之后)

但在第二种情况下,您只需在调用api后打印数据。此时,api尚未发回数据,您将拥有一个空数组


我记得js内容在单个线程上运行(很高兴出错),因此API响应(执行
.subscribe(…)
)将在执行
onGetDescs

之后发生。在第一个示例中,在API调用将数据发送回后打印数据。(异步操作之后)

但在第二种情况下,您只需在调用api后打印数据。此时,api尚未发回数据,您将拥有一个空数组


我记得js内容是在一个线程上运行的(很高兴出错),所以API响应(执行
.subscribe(…)
)将在执行
onGetDescs

之后发生。我可以停止执行,直到像加载弹出窗口一样获得数据吗?没有“停止执行”,但是,如果需要,可以添加加载微调器或类似的微调器。只需在组件中设置一个名为this.loading=true的变量;在调用subscribe方法之前,以及在subscribe方法的“complete”回调中将其设置为false。然后在HTML模板上使用此变量显示或隐藏微调器。查看有关可观察对象的文档,以便更好地了解主题。我是否可以停止执行,直到像加载弹出窗口一样获得数据。没有“停止执行”,但如果您愿意,可以添加加载微调器或类似内容。只需在组件中设置一个名为this.loading=true的变量;在调用subscribe方法之前,以及在subscribe方法的“complete”回调中将其设置为false。然后在HTML模板上,使用此变量显示或隐藏微调器。查看有关可观察对象的文档,以便更好地了解主题。我是否可以停止执行,直到获得数据(如加载弹出窗口)为止发送后,您无法停止执行get调用。(在非常低水平的情况下应该是可能的)。但是,您当然可以使用模式对话框阻止UI,或者向最终用户提供加载数据的视觉指示,用户将无法与UI交互。或者,您可以通过在“
之前设置为
true
的bool有条件地显示字体加载图标来提供加载的视觉线索。订阅
并设置为
false
在解决get或错误输出后,我是否可以停止执行,直到像加载弹出窗口一样获得数据?您无法停止吗发送后执行get调用。(在非常低水平的情况下应该是可能的)。但是,您当然可以使用模式对话框阻止UI,或者向最终用户提供加载数据的视觉指示,用户将无法与UI交互。或者,您可以通过在“
之前设置为
true
的bool有条件地显示字体加载图标来提供加载的视觉线索。在解决get或排除错误后,订阅
并设置为
false