在nodejs中使用async是一种好习惯吗?如何在nodejs中使用辅助函数?

时间:2017-07-13 10:42:33

标签: node.js asynchronous

我是nodejs的新手,我想创建帮助函数来从集合中查找用户。我想在将任何新文档添加到数据库之前执行该辅助函数。 Parallaly我想在其他地方多次使用该辅助函数。

当我只创建一个函数并存储该函数的结果时,控件从该位置传递,并且不会等待输出作为Nodejs基本的异步功能。

如何自定义代码以使用辅助函数并等待结果然后执行所需的操作

如何使用嵌套回调? 嵌套回调不等待回调数据,控制转到下一行

这是我的代码:

login: function (req, res) {

    var user = helpers.checkIfDataExists(req.body.mobileNumber, function (user) {
    if (user) {
       console.log('user exists');
       var email = helpers.checkIfDataExists(req.body.email, function (email) {
          if (email) {
             console.log('email exists');
          } else {
             console.log('email not exists');
          }
      });
    } else {
       console.log('user not exists')
    }
   });
}

我希望控件等到执行函数然后执行条件。 这里默认情况下每次都在其他部分进行控制。

这是辅助函数的代码:

checkIfDataExists: function (value, callback) {
    User.find({mobileNumber: value})
                    .exec(function (err, result) {
                        if (err) {
                            console.log('Error occured');
                            callback(false);
                        } else {
                            console.log('result found');
                            callback(result);
                        }
                    });
},

1 个答案:

答案 0 :(得分:0)

使用回调。将回调函数传递给将返回结果的辅助函数,然后在辅助函数中,在计算结束时写入对该函数的调用。

checkIfDataExists: function (value, callback) {
    User.find({mobileNumber: value})
                    .exec(function (err, result) {
                        if (err) {
                            console.log('Error occured');
                            callback(false);
                        } else if (!result) {
                            console.log('Not Found');
                            callback(false);
                        } else {
                            console.log('result found');
                            callback(result);
                        }
                    });
},

然后在你的主要功能中使用这样的东西。

signUp: function (req, res) {

    var user = helpers.checkIfDataExists(req.body.mobileNumber, function(user){

// do something with results here
log(user);
    if (!user) {
        // add new user
    } else {
        res.send("User exists");
    }
});
}

这是指向article有关回调的链接