JavaScript的任务/动作API?

问题描述:

是否有任何现有的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

如果你的目标是浏览器,你可以使用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!"); 
});