как использовать Promise с express в узле.Яш?

Я использую обещание с Express.

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, он пуст, и я не знаю, почему. Я новичок в node.js. Спасибо заранее.

3 ответов


попробуйте следующее, И после прочтите следующий документ 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();
    });
});

У вас также могут быть другие ошибки (или вещи, которые не следует делать таким образом). Я лишь показываю вам, как использовать обещание.


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-это глобальная переменная, которую вам не нужно требовать.


прежде чем использовать promises, вы должны понять природу асинхронных функций и обратных вызовов. В этом примере, когда express вызывает вашу функцию (req, res) the req объект поступает из HTTP-запроса, и вам нужно вернуть некоторые данные через