我想制作一个模块,输出一组关于我的应用程序运行状况的指标,例如后台队列长度、对服务依赖项的响应时间等。这是使用Deferred的 Node JS :
var metrics = {
queueLength: function(def) {
// .. Do some stuff to resolve the queue length ..
def.resolve(45); // Example
}
// ... more metrics
}
for (i in metrics) {
def = deferred();
metrics[i](def);
promiselist.push(def.promise);
def.promise(function(result) {
metrics[i] = result;
}
}
return deferred(promiselist)(function(result) {
console.log('All metrics loaded', result, metrics);
});
这会产生输出
Metrics loaded [ [Function] ] { queueLength: [Function] }
当我预料到的时候:
Metrics loaded [ 45 ] { queueLength: 45 }
我认为我做错了两件事,但不知道如何“正确”纠正它们:
- 这个
return deferred([array of promises])(group promise)
想法似乎行不通 - 我刚刚意识到
def
在每次迭代中都会被重用,所以如果我有多个指标,它可能只会跟踪最后一个。