1. 程式人生 > >JS執行順序-(deferred 延遲佇列)

JS執行順序-(deferred 延遲佇列)

出現問題

   函式功能:訪問資料庫函式(判斷資料是否為空),如果為空,則執行alert語句 

function a(){ 

isNullEmpty();   //判斷資料是否為空函式;含有非同步

alert(“a”);

}

function isNullEmpty()

{

..

alert("b");

...

}

非同步舉例:

$.ajax({

type : "GET",

url : "**",
data : {
id:**
},
success : function(data, textStatus) {
alert("b");
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
}
});

後面省略

此執行結果為a b,原因是訪問資料庫比較慢,其他部分先執行。

解決方法:

 var dtd = $.Deferred();   
 var wait = function(dtd){
    var tasks = function(){       
isNullEmpty(dtd);     
     };
setTimeout(tasks,0);
return dtd;
};

$.when(wait(dtd))
.done(function(){ alert("b");})

.fail(function(){ alert("出錯啦!"); });

function isNullEmpty()

{

  .....//不為空

 alert(b);

 dtd.resolve(); // 改變Deferred物件的執行狀態        

}

參考資料:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html(推薦)