Ionic -Typeerror:.then()不是函数

时间:2018-07-30 10:57:05

标签: asynchronous ionic-framework promise ionic2

我尝试从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);
  }
}

1 个答案:

答案 0 :(得分:0)

这是因为getLocalData应该返回Promise,但实际上返回undefined(或this.datagetLocalData的开头)。 / 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");
        }
    );
}


您的代码中的问题:

ObservablesPromises是用于处理异步代码的两种模式(其他模式为callbacksasyn-await)。

ObservablePromise都是Javascript Object。两者都像一个值的代理,它将在稍后到达。     值到达时(称为解析值),如果要从.subscribe()提取解析值,请使用Observable,如果要从.then()提取解析值,请使用Promise

在您的情况下,this.http.get('assets/data/people-data.json')返回一个Observablethis.http.get('assets/data/people-data.json').map(res => res.json())也会返回修改后的Observable。但是您尝试使用.then()来提取它,这是不正确的。

您还返回observable.map().subscribe(),它确实返回一个Observable对象,而是一个订阅对象。这是初学者的常见陷阱。

PromisesObservables看起来很像。最好在使用代码之前先对其进行一定程度的学习。