我想使輸出一組關於我的應用的健康指標,例如背景隊列長度,響應時間來服務依賴性等的模塊這是節點JS使用Deferred:NodeJS中承諾數組的承諾延期?
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
所以如果我是越來越在每次迭代重用多個指標可能只會跟蹤最後一個指標。
我很希望在代碼中看到所有的promise對象都是'then'函數。你推薦使用一種語法('.then()'和直接調用)嗎? – Bergi
我把這個決定留給開發者。如果您希望您的代碼看起來像使用通用承諾實現,使用'promise.then()'。如果您覺得使用'promise()'可能會讓代碼讀者感到困惑,並且想要直觀地區分'then'調用,那麼還可以使用'promise.then()'。我個人更願意使用'promise()',因爲它讓我看到更簡潔的代碼和算法邏輯更加透明。這也是一個很好的功能,允許您編寫可以同步或異步功能備份的通用算法。 –