在node.js中有更好的方法吗?

时间:2012-07-17 18:09:12

标签: javascript node.js asynchronous

我正在使用node.js来调用redis来获取一些数据。然后需要将数据分类到数组 - 这不是一个昂贵的过程,但我需要一个函数在排序完成后立即异步执行。

如果我在排序代码之后立即编写函数,它将在数组排序之前完成。所以我看到了几种解决方法:

1)写入for()循环,当前一个循环处于最后一次迭代时,下一个循环开始;在非常结束时,使用异步方法确保它在所有循环完成后运行。

2)使用setTimeout()。我对此感到不安,因为它似乎可能取决于需要处理的数组的大小,它可能会过早地或太晚地神奇地启动。

除了嵌套for循环之外,还有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用setTimeout()并将等待时间设置为数组大小的某个函数。我很同情你,setTimeout()似乎很可怕。然而,有时候这是一种必要的邪恶。

答案 1 :(得分:1)

我很惊讶你用来访问Redis的代码没有异步功能,但这应该有效:

var done = false;

function sort(){
   ...
   done = true;
}

function sortDone(){
   if(done){
      ...
   }else{
      process.nextTick(sortDone);
   }
}

答案 2 :(得分:1)

看起来你只想要reduceRight

arr.reduceRight( function( p, c, i ) {
    // sort
    if ( i === 0 ) {
        // You know you're at the last iteration
        // so you can call whatever async func you want
    }
});