2016-03-31 1 views
0

私はforループで約束を使用しようとしています。 Promise.allを初めて使用する時が来たような気がしますが、動作させることができないようです。nodejsでredisによって返された約束をループします

ここ

は、私がこれまで持っているものです。

redis.keys('en:230:*') 
    .then(function(result) { 
     // result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75'] 
     for (var k = 0; k < result.length; ++k) { 
      redis.zcount(result[k]) 
       .then(function(r) { 
        console.log(r); 
       }) 
     } 
    }) 

私の目標は、すべての「結果」を数えることであるセットをソートし、アンと呼ばれる別のソートセット内のすべての結果を置く:230:トップ これは、カウントが含まれますスコアの結果と値の1,2,5,10,3,75。

現在、私はすべての「結果」とカウントをループスルーしようとしています。

誰でも私に手を差し伸べることができますか?

編集:

Promise.allからわかったことは次のとおりです。 このようなことは機能するはずですか?

を使用でき
var array = []; 
redis.keys('en:230:*') 
    .then(function(result) { 
     // result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75'] 
     for (var k = 0; k < result.length; ++k) { 
      array.push(redis.zcount(result[k])); 
     } 
     return Promise.all(array); 
    }) 
    .then(function(r) { 
     console.log(r); 
    }) 
+1

あなたは既に解決策を知っているような音: 'Promise.all'。どうしたの? – Bergi

+1

はい、 "これと似たようなもの"はうまくいくはずです(ただし、コールバックの中に 'var array = []'を置くことをお勧めします)。試してみませんか? – Bergi

+0

ありがとう、それは実際にうまく動作します。 – Tom

答えて

1

Promise.all

redis.keys('en:230:*') 
    .then(function (results) { 

     // collect individual promises in an array 
     var queries = results.map(function (r) { 
      return redis.zcount(r); 
     }); 

     // return a promise that resolves when all of query promises resolve 
     return Promise.all(queries); 
    }) 
    .then(function (counts) { 
     // do something with counts 
    }) 
    .catch(function(err){ 
     // oops 
    }); 
+0

これは問題なく動作します。私はちょうど返すPromise.All(クエリ)でAを削除するために追加します。小さいものを置く。ありがとう! – Tom

関連する問題