我尝试从Ionic中的asset / data / people-data.json获取数据。在我的provider / people-data.ts
getLocalData(){
try{
this.http.get('assets/data/people-data.json').map(res => res.json()).subscribe(data => {
return data;
});
}
catch (error) {
console.log("Error in httprequest");
return this.data;
}
return this.data;
}
在我的search.ts页面中(我需要在其中发布数据) 代码如下
generateData() {
try {
this.peopleData.getLocalData().then((result) =>{
console.log("data recieved")
});
} catch (error) {
console.error("Couldnot fetch data",error);
}
}
答案 0 :(得分:0)
这是因为getLocalData
应该返回Promise
,但实际上返回undefined
(或this.data
在getLocalData
的开头)。 / p>
以下操作将正常进行。在这里,getLocalData
返回一个可观察对象,generateData
对其进行订阅。
getLocalData(){
return this.http.get('assets/data/people-data.json').map(res => res.json())
}
generateData(){
this.peopleData.getLocalData().subscribe(
(result) =>{
console.log("data recieved")
}, (err)=>{
console.log("Error in httprequest");
}
);
}
Observables
和Promises
是用于处理异步代码的两种模式(其他模式为callbacks
,asyn-await
)。
Observable
和Promise
都是Javascript Object
。两者都像一个值的代理,它将在稍后到达。
值到达时(称为解析值),如果要从.subscribe()
提取解析值,请使用Observable
,如果要从.then()
提取解析值,请使用Promise
在您的情况下,this.http.get('assets/data/people-data.json')
返回一个Observable
。 this.http.get('assets/data/people-data.json').map(res => res.json())
也会返回修改后的Observable
。但是您尝试使用.then()
来提取它,这是不正确的。
您还返回observable.map().subscribe()
,它确实不返回一个Observable对象,而是一个订阅对象。这是初学者的常见陷阱。
Promises
和Observables
看起来很像。最好在使用代码之前先对其进行一定程度的学习。