私はNode.jsを使い慣れていないので、私はまだ非同期関数とコールバックを取り巻いています。私の苦労は、非同期操作でファイルからデータを読み込んだ後に応答を返す方法です。Node.jsとExpress:非同期操作の後に応答を返す方法
私の理解では、応答を送信すると、このように動作します(これは私のために動作します)ということである。
app.get('/search', function (req, res) {
res.send("request received");
});
しかし、今私は、ファイルを読み込んだデータにいくつかの操作を実行し、返すようにしたいです応答が返されます。データに対して実行したい操作が簡単だった場合は、インラインで実行し、依然として有効範囲内にあるのでres
オブジェクトへのアクセスを維持します。
app.get('/search', function (req, res) {
fs.readFile("data.txt", function(err, data) {
result = process(data.toString());
res.send(result);
});
});
しかし、私は実行する必要があるファイル操作は、私は別のファイルに、独自の機能にそれらを分離したことを長くし、十分に複雑です。その結果、私のコードはより次のようになります。
app.get('/search', function (req, res) {
searcher.do_search(res.query);
// ??? Now what ???
});
私は結果を送信するためにres.send
を呼び出す必要があります。しかし、私はdo_search
が非同期的に完了するので、上記の関数で直接呼び出すことはできません。 res
オブジェクトがそのスコープに含まれていないため、do_search
というコールバックで呼び出すことはできません。
誰かがNode.jsでこれを処理する適切な方法を理解できますか?
私は、 'res'オブジェクトをパラメータとして関数に渡すか、関数をパラメータとして渡して、作業が完了したときに呼び出すようにします折り返し電話)。後者はおそらくあなたのコードをExpressのAPIに結合しないので、おそらくより良いでしょう。 –