Promise的catch()函數(shù)
注意1:Promise的rejected必須被處理踩寇,否則整個(gè)node會(huì)奔潰
new Promise((resolve, reject) => { reject("FAIL") })
運(yùn)行結(jié)果
$ node p.js
(node:30853) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): FAIL
因?yàn)镻romise的reject沒(méi)有被處理。
例子2:
new Promise((resolve, reject) => { reject("FAIL") })
.catch((reason) => { console.log("THROW: " + reason) })
再運(yùn)行
$ node p.js
THROW: FAIL
如果不管異常內(nèi)容藏古,直接丟棄異常,可以這樣處理:
new Promise((resolve, reject) => { reject("FAIL") })
.catch((reason) => { })
//.catch(() => {}) // 或者
注意2:異常的返回也是一個(gè)Promise
new Promise((resolve, reject) => { reject("FAIL") })
.catch((reason) => { console.log("catch: " + reason); return "CATCH" })
.then((value) => { console.log("then : " + value) })
運(yùn)行結(jié)果
$ node p.js
catch: FAIL
then : CATCH
我們看到在catch()里面返回一個(gè)resolved(通過(guò)return語(yǔ)句實(shí)現(xiàn))的Promise可以被后面的then()函數(shù)繼續(xù)處理忍燥。
例子2
new Promise((resolve, reject) => { reject("FAIL") })
.catch((reason) => { console.log("catch: " + reason); throw "CATCH" })
.then((value) => { console.log("then : " + value) })
.catch((reason) => { console.log("catch2: " + reason) })
運(yùn)行
$ node p.js
catch: FAIL
catch2: CATCH
我們看到在catch()里面返回一個(gè)rejected(通過(guò)throw語(yǔ)句實(shí)現(xiàn))的Promise可以被后面的catch()函數(shù)繼續(xù)處理拧晕。