Skip to content

Instantly share code, notes, and snippets.

@zxhfighter
Last active December 29, 2015 01:49
Show Gist options
  • Save zxhfighter/7595580 to your computer and use it in GitHub Desktop.
Save zxhfighter/7595580 to your computer and use it in GitHub Desktop.
Promises-异步编程范式

Promises-异步编程范式

由于JavaScript的事件机制,很多场合需要异步回调,有些情况下会有多层的回调嵌套,代码风格不可避免偏向于“意大利面条式”,非常不优雅。

$.get(URL1, function(data) {
    $.get(URL2, function(data) {
        $.get(URL3, function(data) {
            doSomething();
        });
    });
});

并且下面的代码,为了获取渲染表格的数据,需要两次异步请求:

var model = {};

function finish() {
    if (model.data1 && model.data2) {
        renderTable(model.data1, model.data2);
    }
}

$.get(URL1, function(data) {
    model.data1 = data;
    finish();
});

$.get(URL2, function(data) {
    model.data2 = data;
    finish();
});

把上面的两端代码,如果写成下面这样,逻辑是不是变简单很多了?

var ajax1 = $.get(URL1);
var ajax2 = $.get(URL2);
when(ajax1, ajax2).then(function (data1, data2) {
    renderTable(data1, data2);
});

第二段代码如下:

$.get(URL1)
.then(function (data) {
    return $.get(URL2 + '?name=' + data);
})
.then(function (data) {
    return $.get(URL3 + '?name=' + data);
})
.then(function (data) {
    doSomething(data);
});

没错,上面的两端代码就是使用了Promise模式:得到一个当前未完成操作的对象(将来某时会完成),并可立即对其进行直接操作。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment