【问题标题】:Transform code in promises在 Promise 中转换代码
【发布时间】:2017-04-14 20:48:28
【问题描述】:

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

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

如何使用 Promise 编写这段代码?

【问题讨论】:

  • db.collection(config.user) 你不使用上一个查询的结果吗?
  • @Niezborala 不,我不使用上一个查询的结果。但是第二个查询只有在第一个查询满足条件时才会执行。

标签: javascript node.js mongodb mongoose promise


【解决方案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);
  });

【讨论】:

    【解决方案2】:

    也许这可以帮助你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
      })
    
    })
    

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 2015-10-24
      • 1970-01-01
      • 2013-07-01
      • 2016-12-20
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多