4
我想知道是否有任何方法可以自動將錯誤從承諾傳播到另一個承諾? IE:從嵌套的承諾中捕獲拋出的錯誤。q.js自動傳播錯誤(捕獲異步拋出的錯誤)?
例如,在以下代碼示例中,爲了傳播錯誤,「internalWorker」嵌套的promise函數需要 .fail(function (error) { return deferred.reject(error); });
。如果沒有包含這一行,則錯誤將被置頂。 (崩潰的應用程序)
是否有可能自動傳播錯誤,所以我不需要添加.fail()函數我所有的嵌套承諾?
```
function top(input) {
var deferred = q.defer();
internalWorker(input).then(function (value) {
logger.inspectDebug("top success", value);
}).fail(function (error) {
return deferred.reject(error);
});
return deferred.promise;
}
function internalWorker(input) {
var deferred = q.defer();
q.delay(100).then(function() {
throw new Error("internal worker async error");
}).fail(function (error) {
return deferred.reject(error);
});
return deferred.promise;
}
top("hello").then(function (value) {
logger.inspectDebug("outside success", value);
}).fail(function (error) {
logger.inspectDebug("outside fail", error);
}).done();
```
謝謝!正如你的解決方案所描述的,以及我從閱讀qdts的typescript定義中看到的:promise.then()和promise.fail()將允許承諾的嵌套(或者如果它不是承諾已經) 太棒了!現在我明白了,它將我的代碼減少了大約66%(去除了中級功能的錯誤處理) 對於初學者(像我),文檔有點難以理解......但現在我明白了它,我不能回去! – JasonS