1
私は顧客データと顧客の購入を返すapp.getを持っています。このapp.getの内部では、2つの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));
});
に似たものになります。ところで、JSでは通常、(err){return res.status(400.send(err)}を返します。エラーがなくブロック内にある必要がない場合、そのブロックの後のコードが実行されます。ちょっときれいにしてください。このようにすると、ループと2番目のクエリがifブロックの後に来るでしょう。 – Nocturno
こんにちは@Nocturnoは、上記の2番目のクエリとforループを追加しました。 – user964627
ええ、あなたが達成しようとしていたものを見て、他の人があなたに複雑な非同期ライブラリを使用するよう説得しようとする前に標準的な非同期方法を見せたいと思っていました。最初のコールバックの中にループと2番目のクエリを追加する必要があるということです。そのコールバックは、非同期動作がどのように動作するかをasync関数が戻った後にのみ実行されます。 – Nocturno