sql >> データベース >  >> NoSQL >> Redis

ループ内の非同期関数の完了後に関数を呼び出す方法は?

    ここではBluebirdの約束を使用します。コードの意図がかなり明確であり、ネストがないことに注意してください。

    まず、hgetall呼び出しとクライアントを約束しましょう-

    var client = Promise.promisifyAll(client);
    

    それでは、promiseを使用してコードを記述しましょう。.then .mapを使用したノードコールバックと集計の代わりに 。何.then 非同期操作が完了したことを通知します。 .map 一連のものを受け取り、hgetall呼び出しと同じように、それらすべてを非同期操作にマップします。

    Bluebirdが(デフォルトで)Asyncを追加する方法に注意してください 約束されたメソッドの接尾辞。

    exports.awesomeThings = function(req, res) {
        // make initial request, map the array - each element to a result
        return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
           return client.hgetallAsync("awesomething:" + awesomeThing);
        }).then(function(things){ // all results ready 
             console.log(things); // log them
             res.send(JSON.stringify(things)); // send them
             return things; // so you can use from outside
        });
    };
    


    1. マングースを使用したMongoDBでの一括アップサート

    2. Hibernateの第2レベルのキャッシュとしてRedis

    3. MongoDB $ hour

    4. Hadoopクラスターとは何ですか? Hadoopクラスターを構築するためのベストプラクティス