【发布时间】:2018-09-28 15:27:42
【问题描述】:
我正在尝试清理我的 Ionic 应用程序并将冗余功能移动到提供程序中。下面是我的大多数 API 函数的示例(为了简洁起见,我删除了很多不相关的东西)并且它们运行良好。
getDataFromApi() {
....
Promise.all([
...
]).then((result) => {
let headers = new Headers();
...
let body = new FormData();
...
this.http.post(url, body, headers)
.map(res => res.json())
.subscribe(data => {
if (data == '{}') {
this.mydata = [];
} else {
this.mydata = data;
}
}, error => { });
});
}
所以我所做的就是将函数移到提供程序中并像这样进行更改
getDataFromApi() {
....
Promise.all([
...
]).then((result) => {
let headers = new Headers();
...
let body = new FormData();
...
return this.http.post(url, body, headers));
});
}
然后在页面的构造函数中我这样称呼它
this.service.getDataFromApi()
.map(res => res.json())
.subscribe(data => {
if (data == '{}') {
this.mydata = [];
} else {
this.mydata = data;
}
}, error => { });
显然这是行不通的。我已经倾注了 2 天的 SO 帖子,也无法获得其他人的示例和答案以正常工作。我已经尝试在提供程序中进行映射并在页面中调用它时进行订阅,但无论我尝试什么,都会不断收到错误。我知道这个函数正在返回数据,因为我可以在将它移动到提供程序之前看到它。
我做错了什么?
【问题讨论】:
-
你必须返回你的 promise.all :) getDataFromApi() { .... return Promise.all([ ... ])
-
从回调返回不同于从创建它的函数返回。
-
你能告诉我们“Promise.all”位在做什么吗?一般来说,您希望完全处理可观察对象,而不是来回更改 - 但不知道您在这些承诺中做了什么,很难知道...