2013-04-30 18 views
0

是否有任何現有的API /代碼來處理和鏈接長時間運行的「異步」JavaScript函數?JavaScript的任務/動作API?

首先,我不認爲有任何這樣的事情在js中的異步函數?我猜唯一的異步api是jQuery使用的http請求還是我錯了?無論如何,當首先使用jQuery來ping一個服務器,然後登錄,然後加載一堆物品等,如果你知道我的意思,將這些函數包裝在其他完成處理程序中並不是很漂亮。

我現在所做的是定義一個具有某種鏈接列表功能的任務類,並具有task.next屬性等。當我鏈接這些並在第一個執行task.run時,我設計了它使每個任務運行,當它的完成處理程序被稱爲它運行task.next任務等

這工作正常,但我想知道是有任何現有的更完整的apis爲此allready在那裏我應該使用?

Maybee支持取消,進度,異常彙總等?

也許有計劃類似的異步/等待任務,因爲現在在C#中,但在JS?

+1

你有沒有在這方面做了任何研究嗎?你見過[jquery defered](http://api.jquery.com/category/deferred-object/)或[q](https://github.com/kriskowal/q)或[taks.js](http ://taskjs.org/)?甚至有一個[spec](http://wiki.commonjs.org/wiki/Promises/A)... – nemesv 2013-04-30 07:07:23

+0

不,我問你;)對不起,我搜查了但可能太累太瞭解。 – 2013-04-30 08:01:33

回答

0

如果你的目標是瀏覽器,你可以使用setTimeout ..並將你的代碼分解成函數,每次迭代從堆棧/隊列中取出一個,然後做這個部分..也有web工作者......

如果你在做服務器端的JS(比如NodeJS),那麼有庫可以使異步任務更容易管理。在瀏覽器中所花費的工作......你會基本上是要創建的任務包,並解決它們..

function processBundle(tasks, callback) { 
    var hnd = setTimeout(doWork, 20); 

    function doWork() { 
    var item = tasks.shift(); 
    item(); 
    return (
     tasks.length 
     ? setTimeout(doWork, 20) 
     : callback() 
    ); 
    } 
} 

//using it... 
var items = []; 
items.push(simpleFunction1); 
... 
items.push(simpleFunctionN); 
processBundle(items, function(){ 
    alert("done!"); 
});