转换承诺中的代码

时间:2016-11-30 13:41:11

标签: javascript node.js mongodb mongoose promise

这是我的代码,我有依赖的回调:

db.collection(config.user).find({
  "_id": id,
}, function(err, result) {
  if (!err) {
    db.collection(config.user).update({
        '_id': uname,
        "pass": pwd
      }, {
        $set: {
          'pass': pwd
        }
      }, function(err1, result1) {
        db.close();
        if (!err1) {
          res.json({
              "success": 1)
          } else {
            logger.error(err);
          }
        });
    } else {
      logger.error(err);
    }
  });

如何使用promises编写此代码?

2 个答案:

答案 0 :(得分:1)

您可以这样做:

function findUser(user, id) {
  db
    .collection(user)
    .find({ "_id": id }, function (err, result) {
      if (err) {
        return Promise.reject(err);
      }

      return Promise.resolve(result);
    });
}

function updateUser(user, uname, pwd) {
  db
    .collection(user)
    .update({
      '_id': uname,
      "pass": pwd
    }, {
      $set: {
        'pass': pwd
      }
    }, function (err, result) {
      db.close();

      if (err) {
        return Promise.reject(err);
      }

      return Promise.resolve(result);
    });
}

Promise
  .all([findUser(config.user, id), updateUser(config.user, uname, pwd)])
  .then(function (results) {
    res.json({ "success": 1 });
  })
  .catch(function (errors) {
    logger.error(errors);
  });

答案 1 :(得分:0)

也许这可以帮助你findOneAndUpdate Docs

const MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
  // Get the collection
  const col = db.collection(config.user)

  col.findOneAndUpdate(
    {'_id': id }, // filter
    { $set: { 'pass': pwd } }, // update obj
    { returnOriginal: false } // options
  ).then(result => {
    console.log(result) // the updated doc
  })

})