2016-07-27 84 views
2

我有两个功能:Ionic 2/Angular 2中的承诺,如何?

this.geQuizStorage(); 
this.getQuizData(); 

geQuizStorage() { 
    this.quizStorage.getAnswers().then(data => { 
     return data; 
    }); 
} 

getQuizData() { 
    this.quizData.getQuiz().then(data => { 
     return data; 
    }); 
} 

我试图用承诺的2个功能,等到双方都做了,是这样的:

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

任何想法如何做到这一点的离子2/Angular 2

回答

5

你可以用ES6承诺的all函数来做到这一点。不需要外部库。

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

不要我需要解决一些承诺并返回它在我的2个功能? – Patrioticcow

+0

我错过了你的函数没有返回承诺的地方......但是你需要的只是让getQuizStorage和getQuizData返回承诺。在调用服务函数之前,可以通过添加'return'来轻松完成。见编辑的答案。 – yarons

+0

你可以让他们返回数据吗? –

3

基本上你不需要为你的服务调用创建另一个包装函数,只是为了返回一个数据(除非你有验证逻辑来​​验证数据)。然后通过传递方法promises/observable's & subscribe将这两个函数传递给Observable.forkJoin,以等待那些可观察到的内容,直到那些完成。

Observable.forkJoin([this.getQuizData(),this.geQuizStorage()]) 
    .subscribe(data => { 
    console.log(data[0], data[1]); 
    //both call succeeded 
});