Comments 15
А как у $q с поддержкой нативных промисов?
На данный момент $q не поддерживает нативные промисы. Они только недавно попали в стандарт ES6, и поддерживаются далеко не всеми браузерами. Но в команде angular уже ведутся обсуждения на эту тему.
Главное не забывать, что кое-где ещё используемый IE8 использование ключевого слова catch как названия функции не переваривает:
Вместо:
Надо:
Вместо:
return doSomethingAsync().catch(function(err) {
return errorHandler(err);
});
Надо:
return doSomethingAsync()["catch"](function(err) {
return errorHandler(err);
});
Пятый пример — про меня, спасибо.
В п. 5 имеется в виду асинхронно? А если правда параллельно, то как?
Асинхронно конечно.
В том смысле, что в обработку запускаются все промисы. Это несколько увеличивает потребление памяти, но зато общий результат появляется быстрее. В обратной же ситуации (серийное выполнение) — функция будет ждать пока зарезолвится первый промис и затем приступит выполнять второй (представим, что функции в примере возвращают промис с кучей .then). Соответственно уменьшается потребление памяти, но и скорость немного падает. Это более критично в серверных реализациях промисов
asynkFunction
Здесь и далее — явно опечатка.
Встречал ли кто-нибудь ресурсы типа «angular promise в картинках»? Мне приходится выстраивать довольно сложные цепочки с перехватом ошибок, ветвлениями, соединениями и заключениями, но получается это больше на интуитивном уровне, а хочется быть на 100% уверенным. Было бы здорово увидеть пример, в котором описаны различные звенья (с обработкой ошибок и без, множественными finally блоками если это возможно) и всеми возможными путями исполнения.
Забыли уточнить, что
$q.when
работает не только со значениями и ангуляровскими промисами, но с любыми другим промисами. Логика его работы такова, что если он находит в объекте метод then, то вытаскивает из него колбеки и заворачивает их в промис стандарта Promises/A+. Таким образом:angularPromise = $q.when(jQueryPromise)
Sign up to leave a comment.
Правильное использование promise в angular.js