繁体   English   中英

如何让Nodejs调用同步然后我可以轻松使用它?

[英]how to make Nodejs call synchronous then I can use it easily?

app.post('/login', function (req, res) {

    var login = req.body.login;
    var pass = req.body.pass;

    var ret = CheckUserValid(login, pass);

  res.send(ret);
})

function CheckUserValid(login, pass,callback) {
    var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
    client.query(sql, [login, pass], function selectResutl(err, results, fields) {
         console.log(results);
        if (!err) return true;
        else
            throw err;
    });
}

第一个函数是关于请求,第二个是关于调用mysql。 因为它是异步的所以它不起作用。 有人能让我知道如何让它像C#一样同步工作。

CheckUserValid方法的签名已经意味着callback 您可以使用它在db-request完成时调用某些内容,如下所示:

app.post('/login', function (req, res) {
  var login = req.body.login;
  var pass  = req.body.pass;

  // use a closure here for the callback of checkUserValid
  checkUserValid(login, pass, function(err, isValid) {
    // send the response when checkUserValid is done
    res.send(isValid)
  });
})

function checkUserValid(login, pass, callback) {
  var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
  client.query(sql, [login, pass], function(err, results, fields) {
    console.log(results);
    if (!err) {
      // there is no error, pass null for the error
      // and true for the result
      callback(null, true);
    } else {
      // an error occurred in the db-query
      // pass it to the callback
      callback(err)
    }
  });
}

按照惯例,您应该将err作为第一个参数传递,但最终由您决定。 但是,您可以将原始错误传递给初始函数并在那里处理它。

你应该看一下Fibers模块。

您可以按顺序链接要调用的函数

例如,你可以制作res.send(ret); 作为CheckUserValid的回调

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM