淺議 JavaScript 的 Promises/Futures 模式

翻譯:瘋狂的技術宅
原文: 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
歡迎關注,天天都給你推送新鮮的前端技術文章函數

相關文章
相關標籤/搜索