2016-11-30 4 views
-1

Das ist mein Code, in dem ich abhängig Rückrufe haben:in Versprechen

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

Wie könnte dieser Code geschrieben mit Versprechungen werden?

+0

In 'db.collection (config.user)' Sie nicht Ergebnis von i.Vj. verwenden Abfrage? – Niezborala

+1

@Niezborala Nein, ich verwende nicht Ergebnis von prev Abfrage. Die zweite Abfrage wird jedoch nur ausgeführt, wenn die erste Abfrage die Bedingung erfüllt. – AJS

Antwort

1

du auf diese Weise tun können:

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

Vielen Dank !!! – AJS

0

vielleicht kann dies helfen Ihnen 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 
    }) 

})