2015-04-16 46 views
2

我一直在閱讀關於Angular承諾從Web服務中獲取數據,引起我注意的一件事是,Angular出於某種原因知道「請求」是被滿足還是被拒絕,Angular如何知道這一點?它檢查響應狀態碼嗎?你能重新定義這些規則嗎?Angular如何知道承諾是否履行?

回答

3

您的假設是正確的!

例如,$ http和$ resource使用的HttpProvider定義了一個成功的響應,作爲包含在200和299之間的http響應代碼。

您可以通過提供您自己的HttpProvider來更改此行爲。此外,使用HttpProvider的服務可能會覆蓋此響應並替換更合適的失敗/成功條件。

+0

我將此標記爲正確的答案,因爲他提供了我的兩個問題的確切答案。 – user1336321

4

This是對AngularJS Promises的一個很棒的描述。它幫助我更全面地掌握幕後發生的事情。

我們已經陳述的邏輯,父親問兒子拿到 天氣預報,並作爲兒子不能馬上告訴他, 父親有其他的事情要做,而他等待,兒子承諾 他將隨天氣回來。當父親有預測的時候,他會把 收拾起來,或者留在裏面。這裏要注意的重要一點是 是兒子的上山之旅不應該'阻止'從 爸爸做任何事情,所以這就是爲什麼情況是完美的 創建一個承諾,它可以解決(履行或拒絕) 稍後。

使用Angular的then()函數,我們可以指定爸爸在每個結果中需要做什麼 。 then()函數接受2 函數作爲參數:當承諾爲 時執行的函數以及在承諾被拒絕時執行的函數。

// function somewhere in father-controller.js 
var makePromiseWithSon = function() { 
// This service's function returns a promise, but we'll deal with that shortly 
SonService.getWeather() 
    // then() called when son gets back 
    .then(function(data) { 
     // promise fulfilled 
     if (data.forecast==='good') { 
      prepareFishingTrip(); 
     } else { 
      prepareSundayRoastDinner(); 
     } 
    }, function(error) { 
     // promise rejected, could log the error with: console.log('error', error); 
     prepareSundayRoastDinner(); 
    }); 
}; 
+1

謝謝@Grant,這篇文章很棒,但我理解「承諾」背後的邏輯,但我不明白的是,Angular如何決定承諾是「履行」還是「拒絕」。您分享的代碼作爲第二步非常有用,您可以在知道承諾的結果後決定要做什麼。 – user1336321

+0

@ user1336321,我實際上發佈了這個,並且Grant增加了細節。對不起,這並沒有真正回答你的問題。你基本上是想了解決定什麼是成功的反應與「失敗」背後的邏輯。有趣的話題和邁克爾做了一個很好的工作解釋它上面一點。 – MattDionis