gpt4 book ai didi

angular - Ionic 2 Promise 来自服务器的不同数据

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:39 24 4
gpt4 key购买 nike

我使用 ionic 2 RC0 promise服务器 获取数据,但我的问题 我在每个请求中获取一些数据,因为 promise 数据。

所以我的问题是:

如何通过 promise 每个请求提供不同的数据来解决这个问题有什么建议 ?

我的代码:

Api.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 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.';
}
});
}

}

Example :

如果调用 getDataFromApi(12); 返回类似 {{name:bla bla, title: bla bla}} 的数据

然后如果使用不同的 id 再次调用该函数,例如:10

getDataFromApi(10); 返回一些数据,如 {{name:bla bla, title: bla bla}}

通过上面的代码,我得到了一个包含数据的数组,所有数据都是相同的。相同的标题、内容、缩略图和所有内容。

最佳答案

这个问题与 promise 无关。问题在于,您第一次调用该服务时发出请求,然后将响应存储在 this.storeData 属性中。因此,如果您再次调用该服务,即使使用不同的参数,也会执行以下代码行:

if (this.storeData) {
return Promise.resolve(this.storeData);
}

并且请求没有发送到服务器。这就是服务总是返回在第一个请求中获得的响应的原因。为了避免这种情况,只需像这样更改服务:

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/from';
import 'rxjs/add/operator/toPromise' // <- I've added this import!!
import 'rxjs/Rx';

@Injectable()
export class Api {

constructor(public http: Http) {
}

getData(id) {
return this.http.get(URL+'?id='+id)
.map(res => res.json())
.map(data => data.products) // You only return the .products from the server response right?
.toPromise(); // <- you don't need to create a new promise, use the toPromise() method instead
}

}

关于angular - Ionic 2 Promise 来自服务器的不同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40400109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com