2016-11-14 55 views
1

我有一些代碼,看起來像這樣

angular.forEach(config.tvshows.shows, function(show) { 
     promises.push($http.get('http://epguides.frecar.no/show/' + show.replace(/\s|\./g, '') + '/next/')); 
    }); 

    return $q.all(promises).then(function(response) { 
     for (var i = 0; i < response.length; i++) { 
      service.shows.push(response[i]); 
     } 
    }); 
}; 

的想法是,我有一個列表包含HTTP請求(許諾) 。大多數都是成功的,但有些可能會失敗。我不能簡單地刪除失敗的請求,因爲他們有時可能會成功,並且會失敗。

但是,如果迴應的一個失敗,我沒有得到任何答覆推到「service.shows」。有沒有一種方法來處理404,或使該工作要求的代碼正常運行的HTTP請求的任何錯誤響應?

回答

4

您可以自定義處理程序添加到失敗請求http像這樣:

angular.forEach(config.tvshows.shows, function(show) { 
     promises.push($http.get('http://epg\./g, ') + '/next/').catch(function() { 
    // return whatever is needed here 
})); 

    }); 

這樣,如果響應失敗時,你可以回到你的罐頭回應和$ q.all鏈不會停止。如果響應沒有失敗,您將得到服務器發送的響應。

+0

你確定這個工程?我得到以下錯誤:'angular.js:13920 TypeError:promises.push(...)。catch不是函數' – glcohen

+1

您需要將'catch'添加到'get'函數,而不是'push' - 像這樣'$ http.get()。catch' –

+0

謝謝,這工作。我現在可以記錄一個錯誤,但似乎404 HTTP請求仍然被推送到'承諾'。有沒有辦法解決這個問題? – glcohen