首先,我正在做的事情的背景.我正在运行一个处理HttpRequests的HttpServer.
HttpServer.bind(ADDRESS, PORT).then((HttpServer server) {
listenSubscription = server.listen(onRequest);
});
void onRequest(HttpRequest request) {
//handle request here
}
Run Code Online (Sandbox Code Playgroud)
我想为所有这些添加一些日志记录,并且由于它的异步性质,想要为请求添加一些识别标记(因此我可以将请求收据与响应匹配,例如).里面的代码onRequest()调用一堆其他函数来做不同的事情(处理GET和POST请求等),所以简单地在顶部生成一个id是一个麻烦的解决方案,因为我必须通过所有其他的传递它函数调用.然而,我已经在HttpRequest对象周围传递,所以我认为在它上面抛出一个id字段会很好,就像在Javascript中一样,除了Dart不能那样工作.
然后想到了继承HttpRequest类HttpRequest的onRequest()方法,但转换方法接收的对象似乎比我需要的更麻烦和开销.
所以我问,是否有任何惯用的Dart方法将一些数据附加到现有对象?如果没有惯用的东西,那么你能想到的最简单的(代码和运行时复杂性)方法是什么?
好吧,有一个Expando,但我不知道性能影响.
就像是:
// somewhere top level. Create this once.
final loggingId = new Expando();
...
// inside of onRequest
loggingId[request] = generateId();
...
// later inside log()
print(loggingId[request]);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,Expandos就像弱参考地图.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |