2016-07-27 31 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

В принципе вам не нужно создавать другую функцию-обертку для вашего служебного вызова, просто чтобы вернуть данные (если у вас нет логики проверки для проверки данных). Затем пропустите эти две функции в Observable.forkJoin, пройдя метод promises/observable's & subscribe над тем наблюдаемым, чтобы подождать, пока они не закончатся.

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