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

ノードマングースはループ内のクエリが機能しないことを検出します

    async-landへようこそ:-)

    JavaScriptを使用すると、コードを除いてすべてが並行して発生します。これは、特定のケースでは、ループが終了する前にコールバックを呼び出すことができないことを意味します。 2つのオプションがあります:

    a)ループを同期forループから非同期recurseループに書き直します:

    function asyncLoop( i, callback ) {
        if( i < answers.length ) {
            console.log(i)
            var question_ans = eval('(' + answers[i]+ ')');
    
            var question_to_find = question_ans.question.toString()
            var ans = question_ans.ans.toString()
            console.log(ans)
            quiz.where("question",question_to_find).exec(function(err,results)  {
                console.log(ans, results)
                if (ans == "t") {
                    user_type = results.t  
                } else if (ans == "f") {
                    user_type=results.f      
                }
                asyncLoop( i+1, callback );
            })
        } else {
            callback();
        }
    }
    asyncLoop( 0, function() {
        // put the code that should happen after the loop here
    });
    

    さらに、私はこのブログの研究をお勧めします。これには、async-loop-stairwayのさらに2つのステップが含まれています。とても役に立ち、とても重要です。

    b)非同期関数呼び出しをフォーマット

    のクロージャーに入れます
    (function( ans ) {})(ans);
    

    保持したい変数を指定します(ここでは:ans ):

    for (var i=0;i < answers.length;i++) {
        console.log(i)
        var question_ans = eval('(' + answers[i]+ ')');
    
        var question_to_find = question_ans.question.toString()
        var ans = question_ans.ans.toString()
        console.log(ans)
        (function( ans ) {
            quiz.where("question",question_to_find).exec(function(err,results)  {
                console.log(ans, results)
                if (ans == "t") {
                    user_type = results.t  
                } else if (ans == "f") {
                    user_type=results.f      
                }
            })
        })(ans);
    }
    


    1. $slice演算子を使用して配列の最後の要素を取得する

    2. redis:alpineDockerイメージを実行する際の警告を修正する方法

    3. 100%の稼働時間のための地理的に分散されたMongoDBレプリカセット

    4. redishget値をnodejsの変数に保存する