翻譯:瘋狂的技術宅
原文: http://davidshariff.com/blog/...
本文首發微信公衆號:jingchengyideng
歡迎關注,天天都給你推送新鮮的前端技術文章javascript
隨着 JavaScript 使用的不斷增長,異步事件驅動的應用程序變得愈來愈流行。 可是,許多開發者常常面臨的一個問題是:在異步環境中進行依賴於結果的操做。前端
你可能常常會遇到相似的狀況:java
doA(function(aResult) { // 在b內作一些事情而後開始回調 doB(aResult, function(bResult) { // b完成後,在c中作一些事情並開始回調 doC(bResult, function(cResult) { // 完成後,在這裏用doC()的結果作一些事情 }); }); });
因爲每一個步驟都須要前面的步驟結果,因此常常會看到在回調中嵌套回調函數的模式。 這些嵌套回調最終會難以在較大的異步應用程序中維護、理解和規範。 簡單的異步流程會變得愈來愈複雜。promise
在這種狀況下使用的解決方案是 Promise/Futures 模型,它表示還沒有發生的回調結果。 這個概念很是簡單,它不是在一個函數返回結果以前阻塞並等待其完成,而是在調用對象時當即返回其承諾的將要完成的結果。 這會致使非阻塞行爲:微信
doA() .then(function() { return doB(); }) .then(function() { return doC(); }) .done(function() { /* 在這裏作最後要作的事情 */ });
使用 Promise / Future 模型編寫代碼能夠享受到使用嵌套回調的大部分優勢,同時可以使代碼更清晰,更結構化,在大多數異步環境下,這些代碼更易於維護,理解和規範。異步
Promise / Future 並非最終解決方案,還有不少其餘解決方案,這些解決方案也都有各自的優缺點,應該針對不一樣的狀況使用它們。ide
本文首發微信公衆號:jingchengyideng
歡迎關注,天天都給你推送新鮮的前端技術文章函數