(這不是JavaScript closure inside loops – simple practical example的重複,因爲你不能選擇catch函數採用哪個參數)node.js承諾:如何找出哪個迭代拋出.catch語句中的異常?
我是新來的Node.js的異步回調性質。我試圖找出for循環中的哪個元素拋出異常。
當前代碼總是返回數組中的最後一個元素,而不管哪個元素拋出異常。
for (i = 0; i < output.length; i++) {
var entity = Structure.model(entity_type)[1].forge();
/* do some stuff here which I've taken out to simplify */
entity.save()
.then(function(entity) {
console.log('We have saved the entity');
console.log(entity);
returnObj.import_count++;
})
.catch(function(error) {
console.log('There was an error: ' + error);
console.log('value of entity: ', entity); /* THIS entity variable is wrong */
returnObj.error = true;
returnObj.error_count++;
returnObj.error_items.push(error);
})
.finally(function() {
returnObj.total_count++;
if (returnObj.total_count >= output.length) {
console.log('We have reached the end. Signing out');
console.log(returnObj);
return returnObj;
} else {
console.log('Finished processing ' + returnObj.total_count + ' of ' + output.length);
}
})
}
我怎麼寫,讓我訪問拋出異常,所以我可以將其存儲在有問題的元素列表元素的方式承諾?
你是什麼意思返回最後一個元素? – thefourtheye
我的意思是,在遍歷30個元素之後,它總是返回元素30,而不是導致異常的元素(例如15)。 – TheBarnacle
如果你不認爲它是重複的,請參考[臭名昭着的循環問題](http://stackoverflow.com/q/1451009/1048572)。這完全是同一個問題 - 你不必選擇'catch'或'onclick'或其他回調所需的參數。 – Bergi