Angular 从http.get获取数据并将其应用于对象
当我运行这段代码时,我得到了一个充满数据的desciplines数组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
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