什么promise模式


先看一个场景

Javascript promise 模式是什么?_java

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

使用也非常简单

Javascript promise 模式是什么?_java_02

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

Javascript promise 模式是什么?_java_03