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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35034506/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 19:49:38  来源:igfitidea点击:

how to use Promise with express in node.js?

node.jsexpressmongoosepromisesynchronous

提问by hu7sy

I am using Promise with Express.

我在 Express 中使用 Promise。

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

When I log errorsArray, it is empty and I don't know why. I am new in node.js. Thanks in advance.

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

采纳答案by anolsi

Try the following, and after please read the following document https://www.promisejs.org/to understand how the promises work.

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

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

You can have other errors also (or things that shouldn't be done that way). I'm only showing you the basic use of a Promise.

您也可能有其他错误(或不应该那样做的事情)。我只是向您展示了 Promise 的基本用法。

回答by Gokul Thulaseedharan

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

you can write a clean code like this. Promise is a global variable available you don't need to require it.

你可以像这样写一个干净的代码。Promise 是一个可用的全局变量,您不需要它。