then
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的潼關(guān)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
then函數(shù)可以return另一個(gè)promise:
const p1 = new Promise((resolve, reject) =>{ resolve('p1') }) const p2 = new Promise((resolve, reject) =>{ setTimeout(() =>{ resolve('p2') },3000) }) p1.then(res => { console.log(res) return p2 }).then(res =>{ // p2 resolve后才執(zhí)行 console.log(res) }) //p1 // 3s后輸出... // p2
那么這個(gè)p2就會(huì)代替當(dāng)前p1的狀態(tài),等到新的p2的狀態(tài)修改時(shí),下一個(gè)then才會(huì)執(zhí)行
catch
1. 作用
可以捕獲到promise程序執(zhí)行中的error,等同于 .then(null, rejection) 或 .then(undefined, rejection)
2. 可以獲取到的錯(cuò)誤
promise函數(shù)體中拋出的error。在promise resolve后,再拋出錯(cuò)誤,不會(huì)被捕獲
const p1 = new Promise((resolve,reject) => {throw new Error('error')}) p1.catch(error => console.log(error)) // Error: error
promise的reject操作
const p2 = new Promise((resolve,reject) => reject('rejected')) p2.catch(error => console.log(error)) // rejected
then 函數(shù)體中拋出的error
const p3 = new Promise((resolve,reject) => resolve('resolved')) p3.then(res =>{ throw new Error('error') }).catch(error => console.log(error)) // Error: error
then函數(shù)可以返回一個(gè)promise(如果沒(méi)有定義catch方法),如果這個(gè)promise函數(shù)體中有reject或者error,也可以捕獲到
3. 推薦使用catch方式捕獲錯(cuò)誤,而不是then的第二個(gè)參數(shù):
因?yàn)閏atch可以捕獲到它前面所有then方法中的錯(cuò)誤
finally
Promise.all
1. 參數(shù)
參數(shù)不僅僅可以是數(shù)組,具有Iterator接口的對(duì)象都可以。
數(shù)組參數(shù)的每一個(gè)元素為promise實(shí)例,如果不是,就會(huì)調(diào)用Promise.resolve轉(zhuǎn)換為Promise實(shí)例
const obj = { [Symbol.iterator]() { let index = 0 return { next() { return { // promise對(duì)象 和 其他類(lèi)型都可以 value: new Promise(resolve => resolve(index++)), done: index > 2 // value: index++, done: index > 2 } } } } } const p = Promise.all(obj) p.then(res => { console.log(res) // [0, 1] })
2. 狀態(tài)
const p = Promise.all([p1, p2, p3]);
p的狀態(tài)由p1、p2、p3決定,分成兩種情況:
3. catch
如果參數(shù)中的promise定義了catch方法,那么Promise.all()的catch就不會(huì)捕獲到錯(cuò)誤
Promise.race
Promise.resolve
將現(xiàn)有對(duì)象轉(zhuǎn)為Promise對(duì)象。
1. 參數(shù)
Promise.reject
返回一個(gè)狀態(tài)為rejected的promise實(shí)例
Promise.reject()方法的參數(shù),會(huì)原封不動(dòng)地作為reject的理由,變成后續(xù)方法的參數(shù)
const thenable = { then(resolve, reject) { reject('error'); } }; Promise.reject(thenable) .catch(e => { console.log(e === thenable) }) // true e并不是'error'
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享題目:Promise掃盲貼
網(wǎng)站網(wǎng)址:http://bm7419.com/article48/phohhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站、域名注冊(cè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)