2016-08-08 60 views
-2

我有一個調用API來驗證用戶的存在。如果找到用戶,它將發送200,否則它將發送404。下面是我的AngularJS控制器。出於某種原因,通過開發人員工具,我看到從我的API返回404,但該控制器不遵循編程的邏輯。它什麼也沒做。當收到200時,它按照預期執行。有什麼想法嗎?AngularJS控制器邏輯不執行

var params = $stateParams.resetToken; 
    var foundUser; 

    $http.get('/api/user/' + params, { 

    }) 
    .then(function onSuccess (res) { 
     foundUser = true; 
    }) 
    .then(function onError(res) { 
     if (res.status === 404) { 
     foundUser = false; 
     $location.path('/lost'); 
     } else { 
     console.log(err); 
     } 
    }); 
+0

404不被視爲成功,因此'onSuccess()'回調不會觸發。你應該添加一個錯誤子句並在那裏執行你的失敗代碼。 – Claies

回答

2

使用.catch來處理狀態404響應。

var params = $stateParams.resetToken; 
    var foundUser; 

    $http.get('/api/user/' + params, { 

    }) 
    .then(function onSuccess (res) { 
     foundUser = true; 
     //return to chain success 
     return res; 
    }) 
    //.then(function onError(res) { 
    //USE catch to handle errors 
    .catch(function onError(res) (
     if (res.status === 404) { 
     foundUser = false; 
     $location.path('/lost'); 
     } else { 
     console.log(res); 
     } 
     //throw to chain rejection 
     throw res; 
    }); 

錯誤處理程序要麼是.catch方法或.then方法的第二個參數的第一個參數。

+0

'err'沒有被定義。此外,不處理拒絕將承諾轉化爲成功解決的承諾。 – Phil

+0

@菲爾好點。我編輯了答案。 – georgeawg

-1

非成功響應將被解析爲拒絕承諾,所以你需要處理它是這樣

$http.get('/api/user/' + params).then(function onSuccess(res) { 
    // ... 
}, function onError(res) { 
    if (res.status === 404) { 
     // handle the 404 here 
    } else { 
     return $q.reject(res); // don't swallow the error if it's unexpected 
    } 
}); 

https://docs.angularjs.org/api/ng/service/$http#general-usage

200之間的響應狀態代碼299被認爲是成功的狀態,並且會導致被調用的成功回調。任何超出該範圍的響應狀態代碼都被認爲是錯誤狀態,並會導致調用錯誤回調。

+0

感謝您的快速回復和解釋。我正在檢查您提供的資源。我在原始問題中更新了我的代碼。我有同樣的結果。 – CiscoKidx

+0

@CiscoKidx你已經添加了另一個'then'方法,它不是**我上面的答案。 – Phil

+0

真的嗎?你投下了我,因爲我沒有選擇你的答案? – CiscoKidx