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)我在这里打开问题,您能帮我吗: