欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅议JavaScript的Promises/Futures模式

程序员文章站 2022-05-17 16:42:31
    随着 javascript 使用的不断增加,异步事件驱动的应用程序变得越来越流行。 但是,许多开发者经常面临的一个问题是:在异步环境中进行依赖...
 

 

随着 javascript 使用的不断增加,异步事件驱动的应用程序变得越来越流行。 但是,许多开发者经常面临的一个问题是:在异步环境中进行依赖于结果的操作。

你可能经常会遇到类似的情况:

doa(function(aresult) {
    // 在b内做一些事情然后开始回调
    dob(aresult, function(bresult) {
        // b完成后,在c中做一些事情并开始回调
        doc(bresult, function(cresult) {
            // 完成后,在这里用doc()的结果做一些事情
        });
    });
});

由于每个步骤都需要前面的步骤结果,所以经常会看到在回调中嵌套回调函数的模式。 这些嵌套回调最终会难以在较大的异步应用程序中维护、理解和规范。 简单的异步流程会变得越来越复杂。

在这种情况下使用的解决方案是 promise/futures 模型,它表示尚未发生的回调结果。 这个概念非常简单,它不是在一个函数返回结果之前阻塞并等待其完成,而是在调用对象时立即返回其承诺的将要完成的结果。 这会导致非阻塞行为:

doa()
    .then(function() { return dob(); })
    .then(function() { return doc(); })
    .done(function() { /* 在这里做最后要做的事情 */ });

使用 promise / future 模型编写代码可以享受到使用嵌套回调的大部分优点,同时能够使代码更清晰,更结构化,在大多数异步环境下,这些代码更易于维护,理解和规范。

promise / future 并不是最终解决方案,还有很多其他解决方案,这些解决方案也都有各自的优缺点,应该针对不同的情况使用它们。