Что такое правильный способ использования $q.all
в цепочке обещаний then
статья?
Вот какой-то псевдо-код, иллюстрирующий то, что я пытаюсь сделать.
function nestedPromise(val)
{
return aPromiseReturningFunction(val)
.then($q.all(val.arrayProperty.map(function(anotherVal)
{
return anotherPromiseReturningFunction({
prop1: anotherVal.prop
});
})));
}
Expectation: если какой-либо из обещаний вернулся в вызове $q.all
отклонить, обещание, возвращаемый nestedPromise
отвергнут.
Актуально: обещание, возвращенное nestedPromise
, разрешено, хотя одно из обещаний, возвращенных при вызове $q.all
, отклонено.
Я не могу опубликовать все, что я пытался заставить это работать, потому что я чувствую, что я буквально все пробовал ... catch
es по всему месту, используя deferred
и т. Д. Я думаю, что в какой-то момент я получил вещи «работая», используя тонну отсрочек и catch
, но это было действительно уродливо, и это определенно не сработало, потому что я знал, что делаю.
Ожидается, что поведение всех вызовов функций в моем $q.all
вызове для запуска параллельно? Кажется, это то, что в настоящее время происходит, потому что даже после того, как одно обещание отвергает, остальные продолжают работать. На данный момент я могу справиться с этим поведением, хотя это не кажется совершенно правильным, и я хотел бы знать, как остановить выполнение после первого отказа.
'затем' принимает функцию, я не знаю,' $ q' но похоже, что вы могли бы просто сделать: 'val => $ q.all (..)'. Я не могу сказать, ожидаете ли вы, что 'val' внутри' q.all' будет таким же, как параметр 'nestedPromise' или разрешенное значение обещания. – MinusFour
К функции 'then', передайте функцию, которая возвращает' $ q.all (/ * ... * /) ', то есть обещание. – LoremIpsum
Спасибо за ваш ответ @LoremIpsum! Итак, вы говорите, что сломаете '$ q.all' часть в отдельную функцию и назовите это в моем' then'? Что относительно этого функционально отличается от того, что я делаю? –