これは私の最初の投稿です。正しくやっているといいのですが。やりたいプロジェクトのためにnodejsを学んでいて、nodeを使ってWebサービスを書いています。私はチュートリアルに従い、動作するWebサービスにたどり着きましたが、データベースに接続する部分を自分で書かなければなりませんでした. 問題は、データを返しますが、他のすべてをブロックすることです。クエリ 1 に 20 秒かかり、クエリ 2 に 3 秒しかかからず、クエリ 1 を呼び出してからクエリ 2 を呼び出すと、クエリ 2 はクエリ 1 が完了した後にのみ表示され、すべての潜在的なユーザーがブロックされます! これが私のコードの一部です。さらに必要な場合はお問い合わせください
これはリクエスト ハンドラの 1 つです。最後の 2 つのパラメータはテスト用です。
function start(response){
console.log("Request handler 'insertHood' was called.");
response.writeHead(200, {"Content-Type": "text/html"});
var result = db.execute('select x(country_location), y(country_location), country_name, zoom_level from country', response, "Query 1 ", 10);
}
これは、database.js ファイル内の関数です。
function execute(query, response, msg, sleepz) {
var result = sequelize.query(query)
.success(function(rows)
{
sleep(sleepz);
response.write(msg + JSON.stringify(rows));
console.log(msg + (new Date()));
response.end();
}
).error(function(e) {
console.log("An error occured", e);
response.write("there was an error man, yo yoy oy");
response.end();
}
);
}
.success と .error がコールバック関数であることは理解していますが、それらを非同期にする方法が見つからないようです。非同期ライブラリについて読みましたが、それが必要なことをしているとは思いません。何か間違ったことをしていると確信しています。それは...ですか?