获取Promise在ionic框架上返回的元素数

o2g1uqev  于 2023-08-01  发布在  Ionic
关注(0)|答案(1)|浏览(115)

我正在从提供程序中的API获取数据,我想从这个端点显示元素的详细信息:https://jsonplaceholder.typicode.com/posts/3
我用Promise方法获取数据,我想在其他方法中通过id获取元素:

getPostByID(id){
    for( var i=0; i < ( this.getPosts().length ); i++){
      if (this.getPosts[i].id == id) {
        return Promise.resolve(this.getPosts[i]);
      }
    }
  }

字符串
获取所有数据的方法是:

getPosts(){
    return new Promise(resolve => {
      this.http.get(URLS.POSTS).subscribe(data => {
        resolve(data);
      }, err =>{
        console.log(err);
      });
    });
  }


我得到了这个错误:
类型“Promise &{}>”上不存在属性“length”。

zengzsys

zengzsys1#

错误说明了一切。Promise<T>上没有length。您需要从getPostByID方法返回promise。我建议reading about Promise and how it works

getPostByID(id){
    for( var i=0; i < ( this.getPosts().length ); i++){
      if (this.getPosts[i].id == id) {
        return this.getPosts[i]
      }
    }
  }

字符串
现在,当你使用这些数据时,你需要使用.then

this.service.getPostByID(id).then(data => {
  this.post = data
})


您可以在模板中显示它:

{{ post | json }}


您可能希望在加载数据时添加一些加载状态。

this.isLoading = true
this.service.getPostByID(id).then(data => {
  this.isLoading = false
  this.post = data
})


在模板中:

<div class="loading" *ngIf="isLoading">Loading...</div>
<div class="content" *ngIf="!isLoading">
  {{ post | json }}
</div>


此外,在Angular中使用来自RxJS的Observables比promise更惯用,所以您可能应该看看它是如何工作的--它没有那么大的不同,但功能要强大得多。

相关问题