Promise/deferred(转)

来源:互联网 发布:nginx自定义错误页面 编辑:程序博客网 时间:2024/05/24 00:57

很多做前端的朋友应该都听说过Promise(或者Deferred)对象,今天我就讲一下我对Promise的认识

What?

PromiseCommonJS的规范之一,拥有resolverejectdonefailthen等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套。如今异步在web开发中越来越重要,对于开发人员来说,这种非线性执行的编程会让开发者觉得难以掌控,而Promise可以让我们更好地掌控代码的执行流程,jQuery等流行的js库都已经实现了这个对象,年底即将发布的ES6也将原生实现Promise

Why

想象这样一个场景,两个异步请求,第二个需要用到第一个请求成功的数据,那么我们代码可以这样写

    ajax({        url: url1,        success: function(data) {            ajax({                url: url2,                data: data,                success: function() {                }            });        }    });

如果继续下去在回调函数中进行下一步操作,嵌套的层数会越来越多。我们可以进行适当的改进,把回调函数写到外面

    function A() {        ajax({            url: url1,            success: function(data) {                B(data);            }        });    }    function B(data) {        ajax({            url: url2,            success: function(data) {                ......            }        });    }

即使是改写成这样,代码还是不够直观,但是如果有了Promise对象,代码就可以写得非常清晰,一目了然,请看

new Promise(A).done(B);

这样函数B就不用写在A的回调中了

0 0
原创粉丝点击