promise详解

123 阅读1分钟

1.为什么会出现promise,它解决了什么问题

在开发中会出现一个请求依赖于另一个请求的结果,就会无限循环套娃,俗称回调地狱。promise的出现终结了这个问题。

2. promise是什么

promise是异步编程的一种解决方案。从语法来说,promise是一个对象,用过它可以获得异步操作的状态,分别为pendingreslovereject, 状态一旦确定就不会更改,创造promise实例后会立即执行。

3.promise能用来做什么

promise常用方法,
  all:
  # 谁跑的慢,以谁为准执行回调。all接收一个数组参数,里面的值最终都算返回Promise对象
      let pro1 = new Promise((resolve, reject) => {
          setTimeout(() => {resolve(1)},0)
      })
      let pro1 = new Promise((resolve, reject) => {
          setTimeout(() => {resolve(1)},1000)
      })
      let pro1 = new Promise((resolve, reject) => {
          setTimeout(() => {resolve(1)},2000)
      })
      let p = Promise.all([pro1,pro2,pro3])
      p.then((res) => {
          console.log(res)
      })
 race: 
 # 有一定竞争,谁跑的快,以谁为准执行回调
 //请求某个图片资源 
 function requestImg(){ 
     let p = new Promise((resolve, reject) => { 
         let img = new Image(); 
         img.onload = function(){ 
             resolve(img); 
          } 
          img.src = '图片的路径'; 
     }); 
     return p; 
} 
 //延时函数,用于给请求计时 
 function timeout(){ 
     let p = new Promise((resolve, reject) => { 
         setTimeout(() => { 
             reject('图片请求超时'); }, 5000) 
          })
     return p; 
 } 
Promise.race([requestImg(), timeout()]).then((data) =>{ 
    console.log(data); 
}).catch((err) => {
    console.log(err)
})

1.发异步请求

  eg: let p = new Promise((reslove,rejecet) => {
      // 做异步请求
      setTimeout(() => {
          reslove(123)
      },0)
  })

2.发多个并发请求

  let Promise1 = new Promise(function(resolve, reject){}) 
  let Promise2 = new Promise(function(resolve, reject){}) 
  let Promise3 = new Promise(function(resolve, reject){})
  Promise.all([Promise1,Promise2,Promise3]).then((res) => {
      // 三个都成功才会成功
      console.log(1)
  }).catch((err) => {
      // 有一个失败就会报错
      console.log(2)
  })