4

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 流に強制的に準拠させたくありません。

4

1 に答える 1