NodeJS和ExpressJS并行处理rest请求

我是JavaScript,NodeJS和Express的新手。 我写简单的应用程序,它做以下几点

  1. 用户提出请求。
  2. 服务器进行多重rest调用并呈现响应。

我怎样才能确保所有的电话都完成,我创build一个对象,我可以发送给用户? 我看到人们说了一些关于async.parallel的东西。 这是唯一的办法吗? 任何例子都会有帮助。

你可以使用promise来依次运行代码。 这是一个我使用promise做的loginfunction的例子(缩小了一点)。

在一个名为LoginController的模块中,我放置了这段代码。

 this.attemptLogin = function(body, res) { var reason = ""; var user = null; loginM.findUser(body.username) .then(function(result) { if (result.status) { user = result.result[0]; return this.verifyPassword(body.password, result.result[0].Password); } else { reason = {status: false, message: "Incorrect username", result: null}; throw(reason); } }) .then(function(result) { if (result.message) { res.send({status: true, message: "Successfully logged in", result: user}); return; } else { reason = {status: false, message: "Incorrect password", result: null}; throw(reason); } }).catch(function(err) { res.send(err); }); } 

而在另一个名为LoginModelLoginM )的模块中,我已经放置了这个代码

 this.findUser = function(username, email) { return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject({status: false, message: err}); } else { connection.query('select Id, Name, Email, Password from Users ' + 'where (Users.Name = ? OR Users.Email = ?) AND Removed = 0 LIMIT 1', [username, email], function (err, rows) { connection.release(); if (!err) { if(rows.length > 0) { resolve({status: true, message: "Found user", result: rows}); } else resolve({status: false, message: null}) } else { reject({status: false, message: err}); } }); } }); }); } 

还有一个类似的verifyPassword方法,它也返回一个promise。

现在要注意的是:

  • 每个内部的代码都是asynchronous运行的

  • then按顺序执行部分,也就是说,直到你从前一个返回的东西,你才会进入下一个部分

  • 无论你从方法中返回的promise( findUserverifyPassword )作为名为result的variables传递给verifyPassword .then(function(result)