MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Node mongoose tìm truy vấn trong vòng lặp không hoạt động

Chào mừng đến với async-land :-)

Với JavaScript, mọi thứ đều xảy ra song song ngoại trừ mã của bạn. Điều này có nghĩa là trong trường hợp cụ thể của bạn, rằng các lệnh gọi lại không thể được gọi trước khi vòng lặp của bạn kết thúc. Bạn có hai lựa chọn:

a) Viết lại vòng lặp của bạn từ vòng lặp for đồng bộ thành vòng lặp đệ quy không đồng bộ:

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

Ngoài ra, tôi khuyên bạn nên nghiên cứu blog này. Nó bao gồm hai bước tiếp theo lên cầu thang không đồng bộ. Rất hữu ích và rất quan trọng.

b) Đặt lệnh gọi hàm không đồng bộ của bạn thành một lệnh đóng với định dạng

(function( ans ) {})(ans);

và cung cấp cho nó biến mà bạn muốn giữ lại (tại đây: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. MongoDB:cập nhật mọi tài liệu trên một trường

  2. Phần còn lại của dữ liệu khởi động mùa xuân, ràng buộc @Notnull không hoạt động

  3. GridFS có đủ nhanh và đáng tin cậy để sản xuất không?

  4. Google Cloud Platform - Không thể kết nối với mongodb

  5. MongoDB:Máy chủ có cảnh báo khởi động '' Kiểm soát truy cập không được bật cho cơ sở dữ liệu ''