私はクライアントから与えられたリストのforEachステートメントでクエリを取得しようとしています。Node.js非同期の複数のクエリ
結果をフェッチした後、結果をクライアントに取得できるように結果が配列にプッシュされます(明らかに書式設定した後)。
問題は、複数の非同期クエリがmysqlで実行されていることです。問題を解決する方法がわかりません。
var select = function(list, flag, callback){
list.forEach(function(element){
if (flag && (element != '')){
connection.query(sql, function (err, result) {
if (err) {throw err;}
callback(result);
});
} else if (element != ''){
connection.query(sql, function (err, result) {
if (err) {throw err;}
callback(result);
});
}
});
};
私は約束で作業しようとしましたが、私はそれらを使ったことがないので、私はそれを構造化するための適切な方法を見つけ出すことができませんでした、次のポストresolveメソッド
var results = [];
if (req.body.ip == undefined){
mysql.select(req.body.field1.split('\r\n'), false, function(result){
results.push(result);
});
} else if (req.body.name == undefined){
mysql.select(req.body.field2.split('\r\n'), true, function(result){
results.push(result);
});
}
res.send(results);
を使用してこの関数を呼び出します前。
誰かが私に手を貸すことができたら、私は本当にそれを感謝します!
EDIT:FIXED IT !!!!!私はこれを使った。
enter code herevar select = function(list, flag, callback){
var promises = [];
list.forEach(function(element){
if (flag && (element != '')){
promises.push(new Promise(function(resolve, reject){
connection.query(sql, function (err, result) {
if (err) {reject(err);}
resolve(callback(result));
});
}));
} else if (element != ''){
promises.push(new Promise(function(resolve, reject){
connection.query(sql, function (err, result) {
if (err) {reject(err);}
resolve(callback(result));
});
}));
}
});
return promises;
};
そしてこの
var results = [];
if (req.body.ip == undefined){
Promise.all(mysql.select(req.body.field1.split('\r\n'), false, function(result){
results.push(result);
})).then(function(){
res.send(results)
});
} else if (req.body.name == undefined){
Promise.all(mysql.select(req.body.field2.split('\r\n'), true, function(result){
results.push(result);
})).then(function(){
res.send(results)
});
}
「私は約束で仕事をしました」 - あなたが試したことを示してください。約束、とりわけ 'Promise.all'はおそらくあなたが必要とするものです –
私はその機能を約束してみましたが、どういうものが正確に働くのか分かりませんが、それを持っていないと同じ結果を返します。クエリが準備が整う前に実行されます。 –