如何在node.js中使用带有Express的Promise?

hu7*_*7sy 15 synchronous mongoose node.js promise express

我正在使用Promise和Express.

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

当我记录时errorsArray,它是空的,我不知道为什么.我是node.js的新手.提前致谢.

ano*_*lsi 17

请尝试以下操作,之后请阅读以下文档https://www.promisejs.org/以了解promises的工作原理.

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();
    });
});
Run Code Online (Sandbox Code Playgroud)

您也可能有其他错误(或不应该以这种方式完成的事情).我只向你展示了Promise的基本用法.

  • 不,@ stackdave,它不是Node v0.12(!) - 参见[node.green](http://node.green/#ES2015-built-ins-Promise). (4认同)