如何在node.js中使用express来使用Promise?

我使用Express来使用Promise。

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

当我loggingerrorsArray ,它是空的,我不知道为什么。 我在node.js中是新的 提前致谢。

请尝试以下内容,并阅读以下文档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(); }); }); 

你也可以有其他的错误(或不应该这样做的事情)。 我只向你展示一个Promise的基本用法。

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

你可以写这样一个干净的代码。 Promise是一个全局variables,你不需要这个variables。