Promise-異步調用

1. Promise有什麼作用?

Promise用於異步操作(常用於將數據請求與數據處理分開),防止陷入無限回調(回調地獄)

2. Promise三種狀態

  1. pending:等待狀態,比如進行網絡請求,或者定時器沒有到時間
  2. fulfill:滿足狀態,當我們主動回調resolve時,且會回調.then()
  3. reject:拒絕狀態,當我們主動回調了reject時,且會回調.catch()

3. Promise兩種寫法

1. then catch

new Promise((resolve, reject) => {
  //resolve('hello') 只能調用一個
  reject('error')
}).then((data)=>{
  console.log(data);
}).catch((err)=>{
  console.log(err);
})

2. 寫在一個then中

new Promise(((resolve, reject) => {
  //resolve('hello') 只能調用一個
  reject('error')
}).then(data => {
  console.log(data);
}, error => {
  console.log(error);
}))

4. 鏈式調用

1. return Promise.resolve()

new Promise((res,rej)=>{
  setTimeout(()=>{
    res('aa')
  },1000)
}).then(res=>{
  console.log(res, '第一次')

  return Promise.resolve(res+ '111')
}).then(res=>{
  console.log(res, '第二次')

  return Promise.resolve(res+ '22')
}).then(res=>{
  console.log(res, '第三次')
}).catch(err=>{
	console.log(err)
})

2. return

new Promise((res,rej)=>{
  setTimeout(()=>{
    res('aa')
  },1000)
}).then(res=>{
  console.log(res, '第一次')

  return res+ '111'
}).then(res=>{
  console.log(res, '第二次')

  return res+ '22'
}).then(res=>{
  console.log(res, '第三次')
}).catch(err=>{
	console.log(err)
})

5. Promise.all

  Promise.all([
      new Promise(res=>{
        setTimeout(()=>{
          console.log('success1')
          res()//只有兩個成功才能執行then
        },1000)
      }),
      new Promise(res=>{
        setTimeout(()=>{
          console.log('success2')
          res()
        },2000)
      })
  ]).then(res=>{
    console.log('success all')
    console.log(res)
    console.log(res[0])
    console.log(res[1])
  })
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章