サーバーサイド JavaScript の素晴らしい世界に足を踏み入れたばかりで、まだ非同期処理のコツをつかんでいます。ノード プロジェクトをいじった後、この JavaScript が私の過去のガールフレンドの多くに似ていることに気付きました。とにかく、誰かが私を助けてくれることを望んでいました...以下に説明付きのコードがあります:
//this is the function I'm calling to
function queryDb(connection, sql){
connect(connection, function(){
connection.query(sql, function(err, results){
if(!err){
return results;
end(connection);
}
else{
throw err;
}
});
});
}
そして、ここで私は電話をかけます。呼び出しの後、いくつかのコードを実行したいのですが、この関数の処理が完了するまでは実行しません (実際にはデータベースへのクエリであるため、少し時間がかかり、js は処理を続けます)。
var queryResults = db.queryDb(db.connection, "SELECT * FROM Clients");
if(queryResults){
console.log(queryResults);
req.dbResults = queryResults;
next();
}
else{
console.log('The query results where not returned here is the queryResults variable: ' + queryResults);
}
私が望んでいるのは、親関数から返される結果と、その結果に対して何かを行う子関数によって実行されるコールバックです。私はこれを試しました:
queryDb(db.connection, "SELECT * FROM Clients", function(){
if(results){
console.log(results);
req.dbResults = results;
next();
}
else{
console.log('The query results where not returned here is the queryResults variable: ' + results);
}
});
しかし、「呼び出し関数」のコールバックで、親関数によって返された結果にアクセスできません。