我正在使用node.js来调用redis来获取一些数据。然后需要将数据分类到数组 - 这不是一个昂贵的过程,但我需要一个函数在排序完成后立即异步执行。
如果我在排序代码之后立即编写函数,它将在数组排序之前完成。所以我看到了几种解决方法:
1)写入for()循环,当前一个循环处于最后一次迭代时,下一个循环开始;在非常结束时,使用异步方法确保它在所有循环完成后运行。
2)使用setTimeout()。我对此感到不安,因为它似乎可能取决于需要处理的数组的大小,它可能会过早地或太晚地神奇地启动。
除了嵌套for循环之外,还有更好的方法吗?
答案 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
}
});