 <p>One of the things you might do is to chain promises in your original array of promises, and use map to get promises for each element in array, ie consider this snipet</p> <pre><code>function getHotels(city) { return ajaxPromise ... } function getRooms(hotel) { ... } function getFurniture(room) { ... } function showUI(furniture) { ... } getHotels(city).then(function(hotels) { return $q.all(hotels.map( h =&gt; getRooms(h))) }).then(function(hotelRooms) { return $q.all(hotelRooms.map (hr =&gt; getFurniture(hr))) }).then(showUI) </code></pre>