Ionic 2 / Angular 2的承诺,怎么样?

时间:2016-07-27 06:28:17

标签: 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;
    });
}

我正在尝试使用2个函数的promises,并等到两个函数完成后,如:

http.when(this.geQuizStorage(), this.getQuizData()).when(data => {
    // data[0] first function response
    // data[1]
})

在Ionic 2 / Angular 2中如何做到这一点的任何想法

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
});