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