標籤:return als java function 1.5 否則 utf-8 狀態 add
1、類比任務隊列:
function taskQueue() { var taskList = []; var isRun = false; this.addTask = function (task) { task.status = ‘waiting‘; taskList.push(task); }; function run(task) { if (!task.validate()) { task.status = ‘invalidate‘; isRun = false; return; } function endWrap() { if(task.end) task.end.apply(task,arguments); task.status = ‘done‘; isRun = false; }; task.status = ‘running‘; if (task.isAsyn) { if(task.begin) task.begin(); task.run(endWrap); } else { if(task.begin) task.begin(); task.result = task.run(); endWrap(); } } setInterval(function () { if (taskList.length > 0 && !isRun) { isRun = true; run(taskList.shift()); } }, 100);}
task增加一個validate方法,用於檢測此時是否有必要再執行先前已入隊列的任務。task增加了begin的方法,這是供該task被執行時可以被回調,增加了result屬性,如果是同步的task,被執行時可以得到傳回值。如果是非同步endWarp作為callback傳入。至於異常,只能task自己去保證不會拋出異常,否則這個隊列會一直阻塞。
2、在jquery 1.5 版本之後,ajax請求的內部實現被重寫。$.ajax方法返回的不再是一個jqXHR對象,而是一個Deferred對象。可以使用$.Deferred對象的api進行一些非同步作業。
主要包括
.done,
.fail,
.then,.pipe和
$.when方法。
var fetchData = function (url) { return $.ajax({ type: ‘get‘, url: url });}fetchData() //執行函數返回一個Deferred對象執行個體 .done() //接受一個函數,ajax請求成功調用 .fail() //接受一個函數,ajax請求失敗調用 .done() //第二個成功狀態的回調方法 .fail()
javascript延遲物件