【发布时间】:2019-07-20 16:22:51
【问题描述】:
仍然了解 Node 的非阻塞特性。以下代码按预期执行。但是,我想知道是否有更好的方法来完成这项任务。
为路线提供了 3 个参数(邮政编码、类型、弧度)。 从那里我使用 NPM Zipcode 包在提供的 rad 中返回一个邮政编码数组。
然后,我在异步函数中的 zips 数组上使用 for 循环,并等待执行 MySQL 查询并返回承诺的函数的响应。然后返回一个用户对象数组。
我的不确定是我是否正确发送了响应,或者是否有更有效的方法来编写此代码。
谢谢。
router.get('/:zipcode/:type/:rad', function (req, res) {
const rad = req.params.rad;
const zip = req.params.zipcode;
let zips = zipcodes.radius(zip, rad);
zips.push(zip);
let type;
if(req.params.type === 'bartenders') {
type = 0;
} else {
type = 1;
}
const params = {
'type': type,
'zips': zips
};
function userGroup(type, zip) {
return new Promise(resolve => {
connection.query(`SELECT * FROM bt9.users WHERE zip = ${zip} AND type = ${type} AND display = 1`, function (err, result) {
if(err) throw err;
resolve(result);
});
});
}
async function getUsers(params) {
let userList = [];
for (i = 0; i < params.zips.length; i++) {
const users = await userGroup(params.type, params.zips[i]);
for (u = 0; u < users.length; u++) {
userList.push(users[u]);
}
}
return userList;
}
function sendUsers(callback) {
getUsers(params).then( res => {
callback(null, res)
})
}
sendUsers(function(err, result) {
if(err) throw err;
res.send(result)
})
});
【问题讨论】:
标签: javascript node.js express async-await