何を見ているのかわかりません。テストを実行すると、期待どおりの結果が得られます。リクエスト\a
は非同期で処理されます。次のコードを試して実行するとDEBUG=* node app.js
、私と同じ結果が得られますか?
var express = require('express'),
app = express();
app.get('/a', function (req, res, next) {
var f = function () {
res.send('a');
console.log('end', new Date());
};
console.log('sleep', new Date());
setTimeout(f, 10000);
});
app.get('/b', function (req, res, next) {
res.send('b');
});
app.listen(4000);
以下は、最初の 2 つがスリープしている間にへの 2 つのリクエストと へ\a
のリクエストを実行した場合の出力です。\b
express:router dispatching GET /a (/a) +52s // first call to \a
express:router matched get /a +1ms
sleep Sat Oct 13 2012 21:59:42 GMT-0700 (PDT)
connect:dispatcher query +530ms
connect:dispatcher expressInit +1ms
connect:dispatcher router +0ms
express:router dispatching GET /a (/a) +530ms // second call to \a in parallel
express:router matched get /a +0ms
sleep Sat Oct 13 2012 21:59:42 GMT-0700 (PDT)
connect:dispatcher query +874ms
connect:dispatcher expressInit +0ms
connect:dispatcher router +0ms
express:router dispatching GET /b (/b) +874ms // call to \b handled immediately
express:router matched get /b +0ms
end Sat Oct 13 2012 21:59:52 GMT-0700 (PDT) // first call to \a ends
end Sat Oct 13 2012 21:59:52 GMT-0700 (PDT) // second call ends at same time
\b
リクエストがすぐに終了し、2 つのリクエストが両方とも 10 秒後に終了したことがわかります。これ\a
は、実際には (予想どおり) 並行して処理されたことを意味します。