NodeJS和ExpressJS并行处理rest请求
我是JavaScript,NodeJS和Express的新手。 我写简单的应用程序,它做以下几点
- 用户提出请求。
- 服务器进行多重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); }); }
而在另一个名为LoginModel
( LoginM
)的模块中,我已经放置了这个代码
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(
findUser
和verifyPassword
)作为名为result
的variables传递给verifyPassword
.then(function(result)