亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Promise掃盲貼

 更新時(shí)間:2019年06月24日 14:38:31   作者:漓漾li  
這篇文章主要介紹了Promise掃盲貼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

then

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最后狀態(tài)如何,都會(huì)執(zhí)行的操作
  • 沒(méi)有參數(shù),獲取不到當(dāng)前promise最后的狀態(tài)

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ì)象 和 其他類型都可以
          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決定,分成兩種情況:

  • 只有p1、p2、p3的狀態(tài)都變成fulfilled,p的狀態(tài)才會(huì)變成fulfilled,此時(shí)p1、p2、p3的返回值組成一個(gè)數(shù)組,傳遞給p的回調(diào)函數(shù)。
  • 只要p1、p2、p3之中有一個(gè)被rejected,p的狀態(tài)就變成rejected,此時(shí)第一個(gè)被reject的實(shí)例的返回值,會(huì)傳遞給p的回調(diào)函數(shù)。

3. catch

如果參數(shù)中的promise定義了catch方法,那么Promise.all()的catch就不會(huì)捕獲到錯(cuò)誤

Promise.race

  • 只要p1、p2、p3之中有一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個(gè)率先改變的 Promise 實(shí)例的返回值,就傳遞給p的回調(diào)函數(shù)。
  • 參數(shù)、catch規(guī)則同Promise.all

Promise.resolve

將現(xiàn)有對(duì)象轉(zhuǎn)為Promise對(duì)象。

1. 參數(shù)

  • 參數(shù)為promise實(shí)例:原封不動(dòng)的返回這個(gè)實(shí)例。
  • 參數(shù)為thenable對(duì)象:將它轉(zhuǎn)為promise對(duì)象,然后立即執(zhí)行它的then方法
  • 參數(shù)不是thenable對(duì)象,或者是一個(gè)原始值:返回一個(gè)新的promise對(duì)象,狀態(tài)為resolved
  • 沒(méi)有參數(shù):直接返回衣蛾resolved狀態(tài)的promise對(duì)象

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論