什么promise模式
先看一个场景
A 中执行了ajax请求,在回调函数中调用了B,B 中又是一个ajax请求 这种代码方式会有问题 (1)可读性太差 当嵌套层数过多时,会非常痛苦 (2)用户体验很不好 因为代码到等到每一层的ajax请求都完成后才继续执行 如果调用方式变成这样,是不是感觉更好 new Promise(A).done(B); 这就是Promise模式的使用方式,相当于告诉A:执行完成后调用B,在A没有完成之前,代码继续往下执行 Promise是CommonJS的规范之一,能够帮助我们控制代码的流程,避免函数的多层嵌套 通过非阻塞的逻辑方式编写代码,并异步执行,而不是直接将回调传递给函数 promise模式有3种状态: (1)unfulfilled(未完成/执行中) (2)resolved(成功完成) (2)rejected(拒绝/失败)
promise模式如何使用
(1)promise.js promise.js 是Promise模式的轻量级实现,非常小,只有2K 使用也非常简单
(2)jquery deferred jquery 1.5 中首次引入了deferred,他遵循了 Promise模式 deferred 作为对ajax模块较大重写的一部分添加进来,所以可以使用简洁异步方式调用ajax $.ajax("/test") .done(function(){ alert("ok"); }) .fail(function(){ alert("err"); }); deferred 还允许添加多个回调函数,按照添加顺序执行 $.ajax("/test") .done(function(){ alert("ok");} ) .fail(function(){ alert("err"); } ) .done(function(){ alert("ok 2");} ); ajax方法中已经自动使用了deferred,在不是使用ajax的情况下,可以自己通过deferred对象实现