Я использовал ionic 2 RC0
с promise для получения данных с сервера, но моя проблема — я получаю некоторые данные в каждом запросе, потому что данные обещают.
Итак, мой вопрос:
как можно решить эту проблему с обещанием разных данных при каждом запросе? есть предложения?
Мой код:
Апи.тс
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/from';
import 'rxjs/Rx';
@Injectable()
export class Api {
storeData: any;
constructor(public http: Http) {
this.storeData = null;
}
getData(id) {
if (this.storeData) {
return Promise.resolve(this.storeData);
}
return new Promise(resolve => {
this.http.get(URL+'?id='+id)
.map(res => res.json())
.subscribe(data => {
this.storeData = data.products;
resolve(this.storeData);
});
});
}
}
На домашней странице я прочитал данные из API, как показано ниже:
Home.ts
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/from';
import 'rxjs/Rx';
@Injectable()
export class Home {
constructor() {}
getDataFromApi() {
let me = this;
me.api.getData(id)
.then(data => {
if (data != null) {
for (let i = 0; i < data.length; i++) {
console.log(JSON.stringify(data));
}
}else {
this.noProducts = 'There are no products matching the selection.';
}
});
}
}
Пример :
если вызов getDataFromApi(12);
вернул данные типа {{name:bla bla, title: bla bla}}
затем, если снова вызвать функцию с другим id
, например: 10
getDataFromApi(10);
вернуть некоторые данные, такие как {{name:bla bla, title: bla bla}}
С помощью приведенного выше кода я получаю массив, содержащий данные, все данные одинаковы. Тот же заголовок, содержание, эскиз и все такое.
Home.ts
функцииgetDataFromApi()
появилась ошибкаProperty (then) does not exist on type (void)
; любое предложение ? 03.11.2016return
... Я обновил ответ :) 03.11.2016Error: Cannot find module "rxjs/operator/add/toPromise"
03.11.2016import 'rxjs/add/operator/toPromise';
? извините за столько ошибок, я кодирую в текстовой области SO, так как я не на своем ноутбуке. 03.11.2016