Nodejs将昂贵的同步任务转换为asynchronous系列

在nodejs中,我有一个昂贵的函数,如:

function expensiveCode(){ a.doExensiveOperation(1); b.doAnotherExensiveOperation(2); c.doADiffererentExensiveOperation(3); d.doExensiveOperation(4); } 

这样每个子函数调用都有不同的参数,因此不能在循环中完成。 我想节制这个昂贵的函数调用,以便每个子调用nextTick完成,如:

 function expensiveCode(){ process.nextTick(function(){ a.doExensiveOperation(1); process.nextTick(function(){ b.doAnotherExensiveOperation(2); process.nextTick(function(){ c.doADiffererentExensiveOperation(3); process.nextTick(function(){ d.doExensiveOperation(4); }); }); }); }); } 

这显然是丑陋的,如果有20行不同的操作太可怕,甚至不能考虑。

我已经回顾了一些类似“async.js”的库,但是他们似乎都希望被调用的函数是asynchronous的 – 在完成时有一个callback函数。 我需要一个简单的方法来做到这一点,而无需将所有的代码转换为“完成时的callback”方法,这似乎是矫枉过正。

对不起,你的泡沫破裂,但async.waterfallasync.series结合async.apply是你想要的,是的,你需要使这些操作asynchronous。 我发现很难相信你已经find了20个不同的计算密集型操作,但是没有任何一个操作IO。 有关如何提供CPU密集型调用的同步和asynchronous版本的示例,请参阅bcrypt库。 在完成时将代码转换为callback并不过分,它是节点。 这是节点中的规则。 要么你的function没有IO和快速完成,或者你使它与callbackasynchronous。 选项结束。