Я полностью понимаю, что подобные вопросы заданы раньше, но я не запускаю его. Мне нужна цепочка обещаний, и мне нужно подождать, пока все обещания не будут решены.
Моя проблема заключается в том, что мне нужно вызвать различные обещания, основанные на результатах другого обещания :-(
Так на основе результатов promise2 мой promise4 является ЯВНО$ translate.useИЛИ это $ translate.refresh
Это то, что я до сих пор (упрощенно):.
var promise1 = someService.get({}).$promise.then(function (result) {
// do stuff
});
var promise2 = anotherService.getPromise().then(function (result) {
var properties = result[0];
// do stuff
return properties;
});
var promise3 = promise2.then(function(properties){
// using $translate (angular-translate) here which is async as well
var userLanguage = properties.language;
if (userLanguage !== $translate.preferredLanguage()) {
// either this is the 4th promise
$translate.use(userLanguage).then(function (myVar) {
// ...
});
} else {
// or this is the 4th promise
$translate.refresh().then(function (myVar) {
// ...
});
}
});
var loadPromises = {
promise1: promise1
promise2: promise2
promise3: promise3
promise4: ???
};
$q.all(loadPromises).then(function (result) {
// anything done
});
Это не совсем то же самое, что логика в OP. Это правда, что 'обещание3' было сломано, а' return' были отсутствуют, но 'обещание2' было в порядке и может храниться как есть. Это даст доступ к результату этого обещания «всем», как в OP. – Amit
@Amit Это правда, что этот мой код не будет иметь результат prom2, доступный в блоке $ q.all, однако я понимаю, что OP действительно не нуждается в этом, иначе они, вероятно, (?) Не свяжутся с ним2. Но, конечно, вы правы, и если это необходимо, тогда его легко настроить. – dfsq
Если это необходимо, почему у этого последнего обработчика 'then' вообще? Код просто продолжается от прежней функции до последней, без оператора return и дополнительной цепочки обещаний. – Amit