MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявката за намиране на възел mongoose в цикъл не работи

Добре дошли в async-land :-)

С JavaScript всичко се случва паралелно, освен вашия код. Това означава във вашия конкретен случай, че обратните извиквания не могат да бъдат извикани, преди вашият цикъл да е приключил. Имате две опции:

a) Пренапишете своя цикъл от синхронизиращ for-цикл към асинхронен рекурсивен цикъл:

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
});

Освен това препоръчвам изучаването на този блог. Той съдържа две допълнителни стъпки нагоре по стълбата на асинхронния цикъл. Много полезно и много важно.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Хеширане на парола на Mongoose

  2. Как да конвертирате casbah mongodb list в json в scala / play

  3. Създайте 2dsphere геопространствен индекс за сферични заявки в MongoDB

  4. Актуализиране и връщане на документ в Mongodb

  5. Монгос Инсталиране/настройка в Elastic Beanstalk