0

node.jsを使用してredisを呼び出し、データを取得しています。次に、データを配列に並べ替える必要があります。コストのかかる手順ではありませんが、並べ替えが完了した直後に非同期で実行する関数が必要です。

ソートコードの直後に関数を作成すると、配列のソートが完了する前に関数が起動します。だから私はこれを解決するいくつかの方法を見ます:

1)前のループが最後の反復であるときに次のループが開始するfor()ループを記述します。非常に最後に、非同期メソッドを配置して、すべてのループが終了した後に実行されるようにします。

2)setTimeout()を使用します。処理する必要のあるアレイのサイズによっては、魔法のようにすぐに起動したり、遅すぎたりする可能性があるため、これを行うのは不安です。

ループをネストするよりも、これを実行するためのより良い方法はありますか?

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 に答える