在玩 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 符合我的 JavaScriptish 方式。