Как стать автором
Обновить

Комментарии 15

А как у $q с поддержкой нативных промисов?
На данный момент $q не поддерживает нативные промисы. Они только недавно попали в стандарт ES6, и поддерживаются далеко не всеми браузерами. Но в команде angular уже ведутся обсуждения на эту тему.
Насчёт нативных промисов вообще дебаты идут горячие. С одной стороны хорошо, с другой, такие высокоуровневые штуки в стандарте — это гарантия застоя. Например, насколько я знаю, текущая их реализация не проходит А+1.1
Главное не забывать, что кое-где ещё используемый IE8 использование ключевого слова catch как названия функции не переваривает:
Вместо:
  return doSomethingAsync().catch(function(err) {  
    return errorHandler(err);
  });

Надо:
 return doSomethingAsync()["catch"](function(err) {  
    return errorHandler(err);
  });
Да, вы правы. Я намеренно не написал об этом, дабы не усложнять примеры. Так же IE < 9 не переваривает finally, надо писать так:
asyncFunction()["finally"](function () {
  importantFunction();
})
Пятый пример — про меня, спасибо.
В п. 5 имеется в виду асинхронно? А если правда параллельно, то как?
Асинхронно конечно.
В том смысле, что в обработку запускаются все промисы. Это несколько увеличивает потребление памяти, но зато общий результат появляется быстрее. В обратной же ситуации (серийное выполнение) — функция будет ждать пока зарезолвится первый промис и затем приступит выполнять второй (представим, что функции в примере возвращают промис с кучей .then). Соответственно уменьшается потребление памяти, но и скорость немного падает. Это более критично в серверных реализациях промисов
asynkFunction

Здесь и далее — явно опечатка.
Fixed
Встречал ли кто-нибудь ресурсы типа «angular promise в картинках»? Мне приходится выстраивать довольно сложные цепочки с перехватом ошибок, ветвлениями, соединениями и заключениями, но получается это больше на интуитивном уровне, а хочется быть на 100% уверенным. Было бы здорово увидеть пример, в котором описаны различные звенья (с обработкой ошибок и без, множественными finally блоками если это возможно) и всеми возможными путями исполнения.
А картинки Вам помогут быть уверенным? Unit-тесты тут должны лучше подойти…
Полностью согласен, но пишется намного быстрее и легче, когда знаешь и понимаешь, что там происходит.
Забыли уточнить, что $q.when работает не только со значениями и ангуляровскими промисами, но с любыми другим промисами. Логика его работы такова, что если он находит в объекте метод then, то вытаскивает из него колбеки и заворачивает их в промис стандарта Promises/A+. Таким образом:

angularPromise = $q.when(jQueryPromise)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории