var q = require("q"); //需要先用npm安裝node.js q模組
var retpromise = function
(issuc)
else
return deferred.promise;
};retpromise(false).then(function
(data)
).then(function
(data)
).then(function
(data)
, function
(error)
).then(function
(data)
,function
(error)
);
node執行上面的指令碼,結果如下:
fail, enter the first reject func
undefined, enter the fourth resolve func
以上結果說明:
1)乙個reject的promise物件會沿著其後的promise鏈尋找reject處理函式,直到找到為止,並呼叫該reject處理函式;
2)reject處理函式成功執行之後,如果繼續使用then方法,仍會按照正常的promise流程走下去,相當於返回了乙個resolve的promise物件
手動拋個異常,如下
retpromise(true).then(function
(data)
).then(function
(data)
).then(function
(data)
, function
(error)
).then(function
(data)
,function
(error)
);
node執行結果如下:
success, enter the first resolve func
error: success, but threw error, enter the first reject func
undefined, enter the fourth resolve func
手動丟擲異常,相當於返回乙個reject的promise,結果分析與上同
異常 異常鏈
1.常常會在捕獲乙個異常後再丟擲另外乙個異常,並且希望把原始資訊儲存下來,這被稱為異常鏈 2.在jdk1.4前,程式設計師必須自己編寫 來儲存原始異常資訊 3.現在所有throwable的子類子構造器都可以接受乙個cause物件作為引數,這個cause就是異常原由,代表著原始異常,即使在當前位置建立...
Promise統一異常處理
現在前端和後端的互動過程中,很多時候都使用fetch和promise。例如乙個簡化版本的從後台取得資料的方法如下 function getdata url else 然後在其他地方呼叫即可 getdata projects then data getdata users then data 但是上面...
非同步程式設計 Promise任務鏈
講解promise任務鏈之前先看乙個例子 new promise resolve,reject then then 猜猜控制台會列印什麼東西呢,正確答案是 reject 2 resolve 3 想知道為什麼,繼續往下看 promise chainthen函式執行後會返回乙個新的promise物件 如...