Я пытаюсь переписать код для http://m.amsterdamfoodie.nl в более современном стиле. По сути, одностраничное приложение Angular загружает набор ресторанов с указанием местоположений и размещает их на карте. Если пользователь находится в районе Амстердама, то также добавляется местоположение пользователя, а также расстояния до мест.
В настоящее время я управляю асинхронными возвратами, используя много if (relevant object from other async call exists) then do next step
. Я хотел бы больше использовать обещания было бы лучше.
Итак, управление потоком должно быть:
- Начать загрузку данных ajax и вызов геолокации
- если геолокация вернется первой, сохраните координаты на потом
- once ajax data is downloaded
- if geolocation available
- calculate distances to each restaurant, and pass control to rendering code
- иначе передать управление немедленно для рендеринга кода
- if geolocation available
- если геолокация разрешится позже, рассчитайте расстояния и повторите рендеринг
Шаблоны, которые я нахожу в Интернете, предполагают, что все асинхронные вызовы должны быть успешно возвращены, прежде чем продолжить, тогда как мой вызов геолокации может завершиться ошибкой (или вернуть местоположение далеко от Амстердама), и это нормально. Есть ли трюк, который я мог бы использовать в этом сценарии, или условные операторы действительно подходят?
resolve
успешно выполнено, даже если данные отрицательны или отсутствуют. Считайте это успешным результатом. Обрабатывайтеreject
аналогичноcatch
вtry/catch
блоках и обрабатывайте неустранимые исключения. - person New Dev   schedule 04.11.2014if
, теперь выделенные жирным шрифтом, которые использовали управление потоком угловых $http и $q. Это может быть желаемое за действительное? - person Simon H   schedule 05.11.2014