JS執行順序-(deferred 延遲佇列)
阿新 • • 發佈:2019-02-04
出現問題
函式功能:訪問資料庫函式(判斷資料是否為空),如果為空,則執行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(推薦)