Dart、特にdart:io
ライブラリをいじっていると、複数のリスナーを許可するために Streams で奇妙なことをしていることに気付きました。
たとえば、多数の Node ライブラリ (Connect & Express など) にあるハンドラー スタック パターンをエミュレートしたいと考えています。そのためには、リクエスト (およびレスポンス) で複数のリスナーをセットアップできる必要があります。つまり、リクエストからブロードキャスト ストリームを生成する必要があります。
リクエスト オブジェクト (レスポンスなど) のプロパティを維持しないため、これだけを渡すことはできません。
handleRequest (HttpRequest request) {
var stream = request.asBroadcastStream();
// pass stream *and* request to the handlers
}
問題を示すハンドラーの例は、次のようになります。
log (HttpRequest request, Stream stream) {
DateTime start = new DateTime.now();
stream.listen(null,
onDone: () {
DateTime finish = new DateTime.now();
print("${request.method} ${request.uri} -> ${request.response.statusCode} ${finish.difference(start).inMilliseconds}ms");
});
}
この種のことを行う慣用的な方法は何ですか? Dart を私の JavaScript 流に強制的に準拠させたくありません。