什么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对象实现