2016-01-27 14 views
10

Używam Promise z Expressem.Jak korzystać z obietnicy ekspresowej w pliku 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); 
}); 

Kiedy loguję errorsArray, jest pusta i nie wiem dlaczego. Jestem nowy w node.js. Z góry dziękuję.

+4

'username = username();' z pewnością nie jest tym, czego potrzebujesz. – Bergi

+0

Tak, dostrajasz obietnicę. Będziemy musieli zrobić coś w stylu 'username.then (funkcja (dane) {console.log (...)});' – anolsi

+0

czy możesz go ponownie napisać? Z góry dzięki – hu7sy

Odpowiedz

11

Wypróbuj poniższe instrukcje, a następnie przeczytaj następujący dokument: https://www.promisejs.org/, aby zrozumieć, jak działają obietnice.

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

Możesz mieć również inne błędy (lub rzeczy, które nie powinny być wykonane w ten sposób). Pokazuję tylko podstawowe zastosowanie obietnicy.

+0

węzeł musi wymagać ("obietnica")? – stackdave

+3

Nie, @stackdave, nie ma węzła v0.12 (!) - patrz [node.green] (http://node.green/#ES2015-built-ins-Promise). –

+0

@anolsi, ale jak zapisać swoje dane w res po rozwiązaniu obietnicy? Express zwraca res, gdy tylko funkcja się zakończy. –

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

można napisać czysty kod w ten sposób. Obietnica jest zmienną globalną, której nie potrzebujesz.

Powiązane problemy