JavaScript的Promise必須要會的幾個點
阿新 • • 發佈:2020-09-10
1. Promise.resolve()立即將Promise視為成功,立即呼叫then中的語句。
2. Promise.then()語句中也可以包含一個新的Promise物件。
3. Promise.catch(console.error)即可將錯誤丟擲。
4. 除了上面一種方法外,還可以用then()中的第二個引數來處理錯誤。
來看下面一個例子:
const a = ()=>{ new Promise( (resolve) = > { setTimeout(()=>{ console.log('a'); resolve(); }, 1e3 )); const b = ()=>{ new Promise( (resolve) = > { setTimeout(()=>{ console.log('b'); resolve(); }, 1e3 )); const c = ()=>{ new Promise( (resolve) = > { setTimeout(()=>{ console.log('c'); reject('Oops!); }, 1e3 )); const d = ()=>{ new Promise( (resolve) = > { setTimeout(()=>{ console.log('d'); resolve(); }, 1e3 )); // 下面開始呼叫 Promise.resolve() .then(a) .then(b) .then(c) .then(d) .catch(console.error) // 或者是下面這種捕捉錯誤的方式 Promise.resolve() .then(a) .then(b) .then(c) .then(d,()=>{console.log('c erred out but no big deal...')}) .catch(console.error) // 該步驟一般不會執行
如果要忽略c中發生的錯誤,讓呼叫鏈繼續執行,則可以在c所在的then中呼叫.catch()方法,如下:
Promise.resolve()
.then(a)
.then(b)
.then(() => {
c().catch((error) => console.log('error ignored))
}
)
.then(d)
.catch(console.error)
5. finally
Promise.resolve()
.then(a)
.then(b)
.then(c)
.then(d)
.catch(console.error)
.finally(()=>{console.log('always called')})