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

Mongoose findOne on model có trả lại lời hứa không?

Bởi vì findOne không đồng bộ , một cách để trả về từ nó là thông qua callback chức năng

module.exports.isAdmin = function(user_id, callback) {
  var params = {'roles': 'admin'};

  dao.findOne(params, function(err, user) {
    if (err) {
      logger.error(err);
      callback && callback(false);
    }
    if (_.indexOf(user.roles, 'admin') != -1) {
      logger.info("admin user: " + user._id);
      if (user._id == user_id)
          callback && callback(true);
    }
    callback && callback(true);
  });
};

isAdmin(userId, function(v) {
    console.log(v);
})

Một cách khác là tải Promise trong findOne , như tài liệu này đã nói, .exec() cung cấp cho bạn một lời hứa đầy đủ chính thức. Ngay cả với Promise , để đáp ứng yêu cầu của bạn, kết quả có thể được trả về thông qua hàm gọi lại.

module.exports.isAdmin = function(user_id, callback) {
  var params = {'roles': 'admin'};

  var queryPromise = dao.findOne(params).exec();
  queryPromise.then(function(user) {
      if (_.indexOf(user.roles, 'admin') != -1) {
        logger.info("admin user: " + user._id);
        if (user._id == user_id)
          callback && callback(true);
      }
    }, function(err) {
      callback && callback(false);
  });
};



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node.js, Mongo tìm và trả về dữ liệu

  2. Cách chỉ trả về các tài liệu lồng nhau của một mảng từ tất cả các tài liệu

  3. mongodb tổng hợp các giá trị tài liệu nhúng

  4. mongodb $ trong giới hạn

  5. oplog bật trên mongod độc lập không dành cho bản sao