1

在 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”,但它们似乎都希望被调用的函数是异步的——在完成时有一个回调函数。我需要一种简单的方法来做到这一点,而无需将我的所有代码都转换为“完成时回调”方法,这似乎有点矫枉过正。

4

1 回答 1

2

很抱歉打破你的泡沫,但async.waterfall或者也许async.series结合async.apply是你想要的,是的,你需要使这些操作异步。我很难相信你已经找到了 20 种不同的计算密集型操作,它们都没有做任何 IO。查看该bcrypt库以获取有关如何提供 CPU 密集型调用的同步和异步版本的示例。在完成时将代码转换为回调并不过分,它是 node.js 。这就是节点中的规则。要么您的函数不执行 IO 并快速完成,要么您通过回调使其异步。选项结束。

于 2012-12-20T22:07:20.150 回答