浅议 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
欢迎关注,天天都给你推送新鲜的前端技术文章函数

相关文章
相关标签/搜索