我有两个功能:
this.geQuizStorage();
this.getQuizData();
geQuizStorage() {
this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
this.quizData.getQuiz().then(data => {
return data;
});
}
我正在尝试使用2个函数的promises,并等到两个函数完成后,如:
http.when(this.geQuizStorage(), this.getQuizData()).when(data => {
// data[0] first function response
// data[1]
})
在Ionic 2 / Angular 2中如何做到这一点的任何想法
答案 0 :(得分:5)
您可以使用ES6承诺的all
功能执行此操作。不需要外部库。
Promise.all([this.geQuizStorage(), this.getQuizData()]).then(data => {
//do stuff with data[0], data[1]
});
你的函数应该返回promises才能生效,所以我建议进行以下修改:
geQuizStorage() {
return this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
return this.quizData.getQuiz().then(data => {
return data;
});
}
答案 1 :(得分:3)
基本上,您不需要为服务调用创建另一个包装函数,只需返回数据(除非您有验证逻辑来验证数据)。然后通过传递方法promises/observable's
&传递Observable.forkJoin
中的这两个函数。 subscribe
超过那个观察者,等到那些完成。
Observable.forkJoin([this.getQuizData(),this.geQuizStorage()])
.subscribe(data => {
console.log(data[0], data[1]);
//both call succeeded
});