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

Làm thế nào để đảm bảo một cuộc gọi không đồng bộ được thực thi trước khi trả về từ một hàm trong Mongoose?

Bạn vẫn nên sử dụng async nhưng bạn cần async.waterfall cho điều đó. Đây là những gì bạn cần xem xét:

Phương thức chính để gọi async của bạn chức năng:

var getInformation = function(){
  async.waterfall([
    //Array of your functions in order, we will be back here later
  ], function (err) {
       if(err){
         console.log(err);
       }else{
         console.log('Everything OK!');
     }
  );
}

Sau đó, bạn cần các chức năng của mình phải async thân thiện, điều đó có nghĩa là bạn nên sử dụng các lệnh gọi lại và cung cấp dữ liệu của mình từ chức năng này sang chức năng khác. Một cái gì đó như thế này:

function findUser(callback){
  //Do something
  if('Everything OK'){
    callback(err, yourData); //err should be null if everything is OK and yourData should be the data that you wanna use in your next function. e.g. schoolId 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

function findSchool(callback, schoolId){ //Note that we receive the parameter schoolId here but not in the first function
  //Do something
  if('Everything OK'){
    callback(err, yourData); //err should be null if everything is OK and yourData should be the data that you wanna use in your next function. e.g. schoolName 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

function findStudents(callback, schoolName){
  //Do something
  if('Everything OK'){
    callback(err); //err should be null if everything is OK if this is the last function maybe we don't need to send back more data from here 
  }else{
    callback(err); //Something was wrong, "err" should have something different to null
  }
}

Sau đó, bạn nên gọi các hàm của mình trong phương thức chính của bạn:

var getInformation = function(){
  async.waterfall([
    findUser,
    findSchool,
    findStudents
    //Note that there is no need to tell the functions the parameters they are sending or receiving here
  ], function (err) {
       if(err){
         console.log(err);
       }else{
         console.log('Everything OK!');
     }
  );
}

Vậy là xong, bạn có 3 hàm nên được thực thi lần lượt và không cần gọi lại địa ngục.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tiếp cận đúng để cập nhật nhiều bản ghi trong MongoDB bằng Mongoose là gì

  2. _.merge sao chép tài liệu con thay vì cập nhật

  3. Chỉ mục không phân biệt chữ hoa chữ thường MongoDB bắt đầu có vấn đề về hiệu suất

  4. MongoError:Tôpô bị đóng, vui lòng kết nối

  5. Mongo có thể trả lại các tài liệu có các trường trống / thiếu ở cuối theo thứ tự asc không?