2016-11-30 48 views
-1

碼這是我的代碼,我有相關的回調:變換的承諾

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

使用的承諾怎麼會這樣的代碼寫?

+0

在'db.collection(config.user)'你不使用從分組結果查詢? – Niezborala

+1

@Niezborala不,我不使用prev查詢的結果。但是第二個查詢只有在第一個查詢滿足條件時纔會執行。 – AJS

回答

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

非常感謝! – AJS

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

})