(1)ES6方式
http://liubin.github.io/promises-book/#promise-is-always-async
即使在調(diào)用promise.then
注冊回調(diào)函數(shù)的時候promise
對象已經(jīng)是確定的狀態(tài)落追,
<u></u>Promise
也會以異步的方式調(diào)用該回調(diào)函數(shù)骏全,這是在Promise
設(shè)計(jì)上的規(guī)定方針。
例如:
var pro=new Promise(function(resolve){
resolve(1);
});
//已經(jīng)resolve了芋类,再設(shè)置then回調(diào)霜旧。
pro.then(function(v){
alert(v); //1
});
alert(2);
//還是會已異步方式错忱,發(fā)生回調(diào)。
//先alert(2)再alert(v);
//而且颁糟,以后什么時候注冊then航背,都會異步調(diào)用。
(2)jQuery方式
但是jQuery的promise
并不是如此棱貌。
例如:
var defer=$.Deferred();
defer.resolve(1);
//deferred對象已經(jīng)resolve了
defer.done(function(v){
alert(v); //不會執(zhí)行
});
alert(2);
//只執(zhí)行alert(2);
//如果需要執(zhí)行done,就要把注冊done回調(diào)放到defer.resolve()之前箕肃。
注:
jQuery的promise
是一種限制化的deferred
對象婚脱。
var defer=$.Deferred();
var promise=defer.promise();
promise
沒有resolve
,reject
勺像,notify
方法障贸,不能進(jìn)行狀態(tài)更改,
只能注冊回調(diào)吟宦。