Ionic -Typeerror: .then() is not a function

Ionic -Typeerror: .then() is not a function

我试图从 Ionic 中的 assets/data/people-data.json 获取数据。在我的 providers/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);
  }
}

这是因为 getLocalData 应该 return 一个 Promise 但它实际上 returning undefined (或者 this.data 是什么,在getLocalData 的开始)。


以下将正常工作。在这里,getLocalData return 是一个可观察对象并且 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,都是JavascriptObject。两者都像是一个将在稍后时间到达的值的代理。 当值到达时(它称为解析值),如果您从 Observable 中提取解析值,则使用 .subscribe(),但如果您使用从 Promise 中提取解析值,则使用 .then() .

你的情况 this.http.get('assets/data/people-data.json') return 是 Observable。另外 this.http.get('assets/data/people-data.json').map(res => res.json()) returns 修改 Observable。但是你试图使用 .then() 来提取它,这是不正确的。

此外,您 returning,observable.map().subscribe() 不是 return 一个 Observable,而是一个订阅对象。这是初学者常见的问题。

PromisesObservables 看似相似。在您的代码中使用之前,最好在一定程度上学习它们。