4
爲什麼deferred.reject()
調用中沒有任何一個在最後觸發.fail()
處理程序?我如何觸發一個帶有嵌套promise的單個錯誤處理程序?我需要關閉封套承諾。如何使用嵌套的promise來觸發單個錯誤處理程序?
當我在d1
上觸發拒絕時,它仍然會一直到達d2
的分辨率/拒絕率。如果我將.fail()
添加到d1
的塊中,那麼它確實會發現拒絕。但這正是我試圖避免的,每個嵌套承諾的.fail()
處理程序。
var Q = require('q');
somePromise().then(function (v1) {
var d1 = Q.defer();
asyncFunc1(v2, function (err, v3) {
if (!v3)
d1.reject(new Error('error'));
else
d1.resolve(true);
return d1.promise.then(function (promise1Kept) {
var d2 = Q.defer();
asyncFunc2(v4, function (err, v5) {
if (!v5)
d2.reject(new Error('error'));
else
d2.resolve(true);
});
return d2.promise.then(function (promise2Kept) {
console.log('end of promise chain');
});
});
});
}).fail(function (err) {
console.log('Error!');
console.log(err);
});
當你運行這個時你會得到什麼輸出? – user568109
@ user568109添加了更多詳細信息並修復了一些錯別字。 – crzrcn
你能告訴你爲什麼不想要失敗嗎?有必要(this或'then')執行錯誤處理程序。沒有錯誤處理程序默認情況下。它只會達到錯誤並停止。 – user568109