我有两个函数:
this.geQuizStorage();
this.getQuizData();
geQuizStorage() {
this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
this.quizData.getQuiz().then(data => {
return data;
});
}
我正在尝试对 2 个函数使用 promise 并等到两者都完成,如下所示:
http.when(this.geQuizStorage(), this.getQuizData()).when(data => {
// data[0] first function response
// data[1]
})
如何在离子2/角度2中做到这一点的任何想法
你可以
用ES6 promise的all
函数来做到这一点。无需外部库。
Promise.all([this.geQuizStorage(), this.getQuizData()]).then(data => {
//do stuff with data[0], data[1]
});
您的函数应该返回 promise 才能使其正常工作,因此我建议进行以下修改:
geQuizStorage() {
return this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
return this.quizData.getQuiz().then(data => {
return data;
});
}
基本上,您不需要为服务调用创建另一个包装器函数,只需返回数据(除非您有验证逻辑来验证数据(。然后通过传递方法promises/observable's
和subscribe
来Observable.forkJoin
中传递这两个函数,以等待它们完成。
Observable.forkJoin([this.getQuizData(),this.geQuizStorage()])
.subscribe(data => {
console.log(data[0], data[1]);
//both call succeeded
});