2016-01-27 14 views
10

मैं एक्सप्रेस के साथ वादा का उपयोग कर रहा हूं।node.js में अभिव्यक्ति के साथ वादा का उपयोग कैसे करें?

router.post('/Registration', function(req, res) { 
    var Promise = require('promise'); 
    var errorsArr = []; 
    function username() { 
    console.log("agyaaa"); 
    return new Promise(function(resolve, reject) { 
     User.findOne({ username: req.body.username }, function(err, user) { 
     if(err) { 
      reject(err) 
     } else { 
      console.log("yaha b agyaaa"); 
      errorsArr.push({ msg: "Username already been taken." }); 
      resolve(errorsArr); 
     } 
     }); 
    }); 
    } 
    var username = username(); 
    console.log(errorsArr); 
}); 

जब मैं errorsArray प्रवेश करते है, यह खाली है और मैं पता नहीं क्यों। मैं नोड.जे.एस. में नया हूँ अग्रिम में धन्यवाद।

+4

'उपयोगकर्ता नाम = उपयोगकर्ता नाम(); निश्चित रूप से आप जो चाहते हैं वह नहीं है। – Bergi

+0

हां, आप एक वादा को फिर से शुरू कर रहे हैं। हमें 'username.then (फ़ंक्शन (डेटा) {console.log (...)} जैसे कुछ करने की आवश्यकता होगी; ~ – anolsi

+0

क्या आप इसे फिर से लिख सकते हैं? अग्रिम धन्यवाद – hu7sy

उत्तर

11

निम्नलिखित का प्रयास करें, और बाद में निम्नलिखित दस्तावेज़ https://www.promisejs.org/ पढ़ें, यह समझने के लिए कि वादे कैसे काम करते हैं।

var Promise = require('promise'); 
router.post('/Registration',function(req,res,next) { 
    function username() { 
     console.log("agyaaa"); 
     return new Promise(function(resolve,reject) { 
      User.findOne({"username":req.body.username}, function(err,user) { 
       if (err) { 
        reject(err) 
       } else { 
        console.log("yaha b agyaaa"); 
        var errorsArr = []; 
        errorsArr.push({"msg":"Username already been taken."}); 
        resolve(errorsArr); 
       } 

      }); 
     }); 
    } 
    username().then(function(data) { 
     console.log(data); 
     next(); 
    }); 
}); 

आप अन्य त्रुटियां भी कर सकते हैं (या ऐसी चीजें जिन्हें इस तरह से नहीं किया जाना चाहिए)। मैं केवल आपको वादा का मूल उपयोग दिखा रहा हूं।

+0

node8 की आवश्यकता है ('वादा')? – stackdave

+3

नहीं, @ स्टैकडेव, यह नोड v0.12 (!) के रूप में नहीं है - देखें [node.green] (http://node.green/#ES2015-built-ins- समझौता)। –

+0

@anolsi लेकिन वादे के हल होने के बाद आप अपने डेटा को res में कैसे लिखते हैं? जैसे ही फ़ंक्शन निकलता है, एक्सप्रेस वापस लौट रहा है। –

2
router.post('/Registration', function(req, res) { 
    return User 
     .findOne({ username: req.body.username }) 
     .then((user) => { 
      if (user) { 
       return console.log({ msg:"Username already been taken" }); 
      } 
      return console.log({ msg: "Username available." }); 
     }) 
     .catch((err)=>{ 
      return console.error(err); 
     }); 
}); 

आप इस तरह एक साफ कोड लिख सकते हैं। वादा एक वैश्विक चर उपलब्ध है जिसे आपको इसकी आवश्यकता नहीं है।

संबंधित मुद्दे