2015-12-22 69 views
0

我在這裏讀到這篇文章:http://weblog.west-wind.com/posts/2014/Oct/24/AngularJs-and-Promises-with-the-http-Service 它說它是流行的模式使用包裝的承諾,但Angular的官方文檔在這裏https://docs.angularjs.org/api/ng/service/$http說:「$ http傳統承諾方法的成功和錯誤已被棄用。如果$ httpProvider.useLegacyPromiseExtensions設置爲false,那麼這些方法將拋出$ http/legacy錯誤「,我應該採取哪種方式?看來我將不得不使用then()。使用包裹的承諾或明確的承諾

任何人都可以點亮嗎?謝謝

+0

避免'.success'和'.error'方法。它們鏈接不好,不推薦使用。 – georgeawg

+0

感謝您的回覆 –

回答

1

快速回答:請勿包裝$http承諾。

article you cite,那傢伙寫道:

個人而言,我已經辭職自己只是轉發$ HTTP生成的承諾,並在一點點的成本使用.success()和.error()不一致。在這一點上,我必須知道,在我的服務中這個特定的調用返回$ http promise,並且我需要調用它的.success()和.error()函數而不是.then()來處理回調。但我仍然更喜歡用額外的承諾來包裝我的服務。無論你推動這種行爲,在堆棧中的某個地方,最終會出現這種不一致的地方,即$ http promises和stock Promises之間的區別顯示出來 - 所以我不妨將它推入應用程序層,並保存一些無意義的代碼以隱藏一個實現細節。

這是無稽之談。 $http服務始終返回$q承諾。 .then.catch方法始終可用。 (沒有很好的記錄,但可用。)

這是我寫的另一個問題。在$http服務

的AngularJS團隊在他們的新發現的智慧.success.error方法

棄用已決定棄用.success.error方法。這些方法是越野車,我說好消除

有關.success.error方法棄用(或應該說失敗)的更多信息,請訪問最新的AngularJS $http Service API Docs -- deprecation notice

我們應該避免.success.error方法和學習使用.then.catch.finally從現在開始。

傳統AngularJS 1.2

我做了一些spelunking in the AngularJS Github。傳統$http服務創建一個$q承諾(L750)並隨後附加方法方法(L769)和越野車.error方法(L776)

這是什麼意思是說,堅持使用老版本的AngularJS的人可以遷移到.then.catch.finally方法。

- Is there a shortcut to proxy-resolve/reject a promise to an Angular

+0

感謝您的澄清 –