【发布时间】:2018-02-11 01:28:31
【问题描述】:
我有一个 app.get,它将返回客户数据和客户购买。在这个 app.get 中,我需要运行两个 mysql 调用并构建一个数组以传回。
如何执行一个接一个的查询并处理该数据?
app.get('/customer', function (req,res) {
var response1 = [];
var response2 = [];
var processedData = [];
connection.query('QUERY HERE', function(err, rows, fields) {
if (!err){
response.push({rows});
} else {
res.status(400).send(err);
}
});
//for loop 'response' results and perform another query
for (var i = 0; i < response1.length; i++) {
var row = response1[i];
connection.query('QUERY HERE FOR row.customerid', function(err, rows, fields) {
if (!err){
processedData.push({'Customer Name:' : row.customername, 'purchases' : rows});
} else {
res.status(400).send(err);
}
});
}
//Send json back
res.setHeader('Content-Type', 'application/json');
res.status(200).send(JSON.stringify(processedData));
});
【问题讨论】:
-
在 if 块中添加你的循环和第二个查询。顺便说一句,在 JS 中,我们通常使用 if (err) { return res.status(400.send(err) },然后该块之后的任何代码在没有错误并且不需要在块内时执行。不是规则, 稍微干净一点。如果你这样做,你的循环和第二个查询将在 if 块之后。
-
嗨@Nocturno,添加了我上面的第二个查询以及for循环。语法可能不是 100%,但只是想概述一下我正在努力完成。
-
是的,我看到了你想要完成的工作,我想在其他人试图说服你使用复杂的异步库之前向你展示标准的异步方式。我想让你看到的是你必须在第一个回调中添加你的循环和第二个查询。该回调仅在异步函数返回后执行。这就是异步行为的工作原理。我将修改您的代码并将其添加为答案。
标签: javascript node.js express asynchronous