在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”这样的库,但它们似乎都期望被调用的函数是异步的 - 在完成时有一个回调函数。我需要一个简单的方法来做到这一点,而不是将我的所有代码转换为'完成后回调'方法,这看起来有点矫枉过正。
答案 0 :(得分:2)
很抱歉破解了您的气泡,但async.waterfall
或async.series
与async.apply
相结合是您想要的,是的,您需要将这些操作设为异步。我发现很难相信你已经发现了20种不同的计算密集型操作,其中没有任何IO可以执行任何操作。查看bcrypt
库,了解如何提供CPU密集型调用的同步和异步版本的示例。在完成时将代码转换为回调并不是过度的,它是节点。这是节点中的规则。您的函数不执行IO并快速完成,或者使其与回调异步。选项结束。