jquery中的Promise,也就是我們所知道的Deferred對象。 舉例1: var data=""; function runAsync(){ var def = $.Deferred(); //做一些非同步操作 setTimeout(function(){ console.log('執行完成 ...
jquery中的Promise,也就是我們所知道的Deferred對象。
舉例1:
var data="";
function runAsync(){
var def = $.Deferred();
//做一些非同步操作
setTimeout(function(){
console.log('執行完成');
data='隨便什麼數據'
def.resolve(data);
}, 0);
//可以在外部改變狀態
return def; //返回的deferred對象
}
console.log(data)//列印的是空字元串;
runAsync().then(function(data){
console.log(data);//列印:'隨便什麼數據'
});
這是我們就可以在ajax請求拿到數據的後,執行我們的方法,不用在ajax成功回調的裡面寫繁瑣的代碼。此方法不好的地方在於,外部可以改變狀態(弊端),看例二。
舉例2:
var data="";
function runAsync(){
var def = $.Deferred();
//做一些非同步操作
setTimeout(function(){
console.log('執行完成');
data='隨便什麼數據'
def.resolve(data);
}, 0);
//可以在外部改變狀態
return def; //返回的deferred對象
}
console.log(data)//列印:空字元串;
var def=runAsync();
def.then(function(data){
console.log(data);//不列印了!!!
});
def.resolve("我提前結束啦,不等數據啦")//列印:我提前結束啦,不等數據啦。(手動改變狀態了)
但是我們不想在外部串改狀態,return def 換成 def.promise(),會保證狀態不被提前更改。更加詳細的內容請點擊:https://www.cnblogs.com/lvdabao。