Javascript 承诺在离子2/角度2,如何?
我有两个职能:Javascript 承诺在离子2/角度2,如何?,javascript,angular,angular-promise,ionic2,Javascript,Angular,Angular Promise,Ionic2,我有两个职能: this.geQuizStorage(); this.getQuizData(); geQuizStorage() { this.quizStorage.getAnswers().then(data => { return data; }); } getQuizData() { this.quizData.getQuiz().then(data => { return data; }); } 我正在
this.geQuizStorage();
this.getQuizData();
geQuizStorage() {
this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
this.quizData.getQuiz().then(data => {
return data;
});
}
我正在尝试对这两个函数使用承诺,并等待这两个函数都完成,例如:
http.when(this.geQuizStorage(), this.getQuizData()).when(data => {
// data[0] first function response
// data[1]
})
基本上你不需要为你的服务调用创建另一个包装函数,只需要返回一个数据(除非你有验证逻辑来验证数据)。然后通过传递方法将这两个函数传递到该可观察对象上,直到它们完成
Observable.forkJoin([this.getQuizData(),this.geQuizStorage()])
.subscribe(data => {
console.log(data[0], data[1]);
//both call succeeded
});
您可以使用ES6 promise的函数来实现这一点。不需要外部库
Promise.all([this.geQuizStorage(), this.getQuizData()]).then(data => {
//do stuff with data[0], data[1]
});
您的函数应该返回承诺以使其工作,因此我建议进行以下修改:
geQuizStorage() {
return this.quizStorage.getAnswers().then(data => {
return data;
});
}
getQuizData() {
return this.quizData.getQuiz().then(data => {
return data;
});
}
我不需要解决一些承诺并在我的2个函数中返回它吗?我错过了函数不返回承诺的部分。。。但你所需要的只是做出
getQuizStorage
和getQuizData
回报承诺。这可以通过在调用服务函数之前添加return
轻松实现。请参阅编辑后的答案。您能让他们返回数据吗?我正在这样做,但我有一个问题,如果请求失败,请承诺。所有人都进入拒绝功能,但有一个错误:Uncaught(in promise)我在这里打开问题,您能帮我吗: