我一直在閱讀關於Angular承諾從Web服務中獲取數據,引起我注意的一件事是,Angular出於某種原因知道「請求」是被滿足還是被拒絕,Angular如何知道這一點?它檢查響應狀態碼嗎?你能重新定義這些規則嗎?Angular如何知道承諾是否履行?
回答
您的假設是正確的!
例如,$ http和$ resource使用的HttpProvider定義了一個成功的響應,作爲包含在200和299之間的http響應代碼。
您可以通過提供您自己的HttpProvider來更改此行爲。此外,使用HttpProvider的服務可能會覆蓋此響應並替換更合適的失敗/成功條件。
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(); }); };
謝謝@Grant,這篇文章很棒,但我理解「承諾」背後的邏輯,但我不明白的是,Angular如何決定承諾是「履行」還是「拒絕」。您分享的代碼作爲第二步非常有用,您可以在知道承諾的結果後決定要做什麼。 – user1336321
@ user1336321,我實際上發佈了這個,並且Grant增加了細節。對不起,這並沒有真正回答你的問題。你基本上是想了解決定什麼是成功的反應與「失敗」背後的邏輯。有趣的話題和邁克爾做了一個很好的工作解釋它上面一點。 – MattDionis
- 1. 如何履行承諾
- 2. Restangular running on履行承諾時履行承諾,即使承諾被拒絕
- 3. 當任何承諾完成時,是否有可能履行承諾?
- 4. 如何「反向」拒絕/履行承諾?
- 5. 如何用Nightwatch履行承諾
- 6. 如何使用依賴其他承諾履行的承諾?
- 7. Node.js:forEach在承諾履行前完成承諾
- 8. 承諾或拒絕履行混亂
- 9. 承諾永遠不會履行
- 10. angular 2承諾承諾
- 11. 爲什麼這項服務回報承諾而不是履行承諾?
- 12. 無論承諾履行如何執行相同的操作?
- 13. 如何在藍鳥中實現履行承諾
- 14. 如何在繼續之前等待承諾履行
- 15. MVC Contrib是否履行了提高ASP.NET MVC生產力的承諾
- 16. 藍鳥承諾作爲承諾回調不知道api
- 17. 知道操作是成功還是拒絕承諾
- 18. Ionic 2/Angular 2中的承諾,如何?
- 19. 如何知道行是否已更新
- 20. 如何知道模型是否可行
- 21. 如何知道是否
- 22. Angular的承諾是異步的嗎?
- 23. Angular JS $ http承諾執行兩次
- 24. 如何使Monads知道異步函數(承諾/未來)
- 25. 甲骨文如何知道交易承諾?
- 26. 如何知道合作者的全部承諾
- 27. 返回JavaScript承諾拒絕履行價值
- 28. nodejs + Q承諾:在履行處理中沒有引用異常
- 29. PushManager訂閱承諾永遠不會履行也不拒絕
- 30. 有沒有辦法在確切時間履行承諾?
我將此標記爲正確的答案,因爲他提供了我的兩個問題的確切答案。 – user1336321