0

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

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

1) 编写 for() 循环,当前一个循环处于最后一次迭代时,下一个循环开始;在最后,放置异步方法以确保它在所有循环完成后运行。

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

有没有比嵌套 for 循环更好的方法来解决这个问题?

4

3 回答 3

1

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

于 2012-07-17T18:12:54.213 回答
1

我很惊讶您用来访问 Redis 的任何代码都没有异步功能,但这应该可以工作:

var done = false;

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

function sortDone(){
   if(done){
      ...
   }else{
      process.nextTick(sortDone);
   }
}
于 2012-07-17T18:21:06.950 回答
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
    }
});
于 2012-07-17T18:21:38.080 回答