使用异步包同步运行mongoose查询

时间:2017-04-25 05:44:21

标签: node.js mongoose

我想检查用户名是否存在。 我必须同步运行它。

function notExisted(string) {
    var username = '';

    //STEP 1: check if any user is existed with the givven username, and asign a value to username var.
    User.findOne({'username': string}, function (err, result) {
      if (err) {
        req.flash('error', 'An error occured.');
        res.redirect("back");
      } else {
        if (!result === null) {
          username = result.username;
        } else {
          username = null;
        }
      }
    });

    // STEP 2: based on username varibale return false(if founded) or true(if not founded)
    // if any user has founded, the username variable would be the username. Otherwise it would be null.
    if (username === null) {
      return true;
    } else {
      return false;
    }
  }

如您所见,第1步和第2步应该一个接一个地运行。 你知道如何通过async库或更好的方法同步运行这2个步骤吗? 提前致谢。

1 个答案:

答案 0 :(得分:1)

使用下面的代码,我还没有测试过,但这是使用async模块进行瀑布的方法: -

let async = require('async');
async.waterfall([
     function(callback) {
          User.findOne({'username': string}, function (err, result) {
               if (err) {
                    callback( true, null);
               } else {
                    if (!result === null) {
                         username = result.username;
                    } else {
                         username = null;
                    }
                    callback( null, username);
               }
          });
     },
     function (username, callback) {
          if (username === null) {
               callback( null, true)
          } else {
               callback( null, false)
          }
     }
], function (err, result) {

     if (err) {
          req.flash('error', 'An error occured.');
          res.redirect("back");
     } else {
          console.log(result);// gives you true / false
     }
})