2012-07-17 101 views
0

我使用node.js来调用redis来获取一些数据。然后数据需要排序到数组 - 不是一个昂贵的过程,但我需要一个函数在排序完成后立即执行。有没有更好的方式在node.js中做到这一点?

如果我在排序代码后面写入函数,它将在数组排序之前触发。所以我看到了一些解决这个问题的方法:

1)为()循环写下一个开始的地方,当前一个在最后一次迭代时;在VERY结束时,使用异步方法确保在所有循环完成后运行。

2)使用setTimeout()。我对这样做感到不安,因为它可能取决于需要处理的阵列的大小,它可能太早或太晚会奇迹般地启动。

有没有比嵌套for循环更好的方法呢?

+1

如何异步排序? – 2012-07-17 18:16:46

+0

你用什么来排列数组?你能不能将一个onComplete函数传递给该函数,以便在排序完成后触发它? – 2012-07-17 18:18:07

+0

在JavaScript中对常规数组进行排序是同步的,因此在sort之后调用的函数不会将数组视为排序是不可能的。可以举一些例子吗? – 2012-07-18 08:20:35

回答

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 
    } 
}); 
+0

不知道这个存在,谢谢。 – 2012-07-17 18:24:52

1

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

1

我惊讶你使用什么都代码访问的Redis不具备异步能力,但这应该工作:

var done = false; 

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

function sortDone(){ 
    if(done){ 
     ... 
    }else{ 
     process.nextTick(sortDone); 
    } 
} 
相关问题