получить количество элементов, возвращаемых Promise на ионной основе - PullRequest
0 голосов
/ 26 сентября 2018

Я получаю данные из API в поставщиках, и я хочу отобразить детали элемента с этой конечной точки: https://jsonplaceholder.typicode.com/posts/3

Я получаю данные с помощью метода Promise и хочу получитьэлемент за идентификатором в другом методе, подобном этому:

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);
      });
    });
  }

Я получил эту ошибку:

Свойство'length' не существует для типа 'Promise <{}>'.

1 Ответ

0 голосов
/ 26 сентября 2018

Ошибка говорит само за себя.Там нет length на Promise<T>.Вам нужно вернуть обещание из вашего getPostByID метода.Я предлагаю прочитать о Promise и о том, как оно работает .

  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 более идиоматично использовать Observables из RxJS, чем обещания, поэтому вам, вероятно, стоит проверить, как это работает - это не так уж и отличается, но гораздо более мощно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...