前端,es6中的promise異步方法,及用的場景


網上看了些資料,總結以下幾種方法
1,數據管道方法,這個方法用的場景:URL1請求返回的數據1,請求URL2的傳參是數據1,返回數據2,請求URL3的參數是數據2.
new Promise(function(resolve, reject) {
  resolve(1);
})
.then(function(res) {//1
  return new Promise(function(resolve, reject) {
    resolve(res+1);//2
   });
})
.then(function(res) {
  return new Promise(function(resolve, reject) {
    resolve(res+1);//3
  });
})
.then(function(res) {
  console.log(res,"結果");//返回3
})
2.用promise請求url,return一個promise對象,解決異步方法嵌套問題
ajax(參數){
  return new Promise((resolve, reject)=>{
    ajax(參數,res=>{
      if(res.status == '200'){
        try{
          resolve (JSON.parse(返回成功的結果))//返回成功的結果
        } catch (e){
          reject(e)//失敗的結果
        }
      }
 
    })
 
  })
}
ajax(url).then(
  res =>{
    console.log(res))/返回成功的結果
  }
)
.catch(err =>{
  console.log(err)
})
3.promise.all, 使用場景請求多個ajax,放在一個變量里面,等到結果全部請求成功后供其他方法使用。
let list=(time)=>{
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      resolve(`${time/1000}秒后出來`)
    },time)
  })
}
let p1=list(3000)
let p2=list(2000)
Promise.all([p1,p2])
.then((res)=>{
  //就算p1請求的時間長,也要等他數據出來后,才打印出[p1,p2]。這個誰放在前邊,先請求誰。可以加載loading室使用這個方法
  console.log(res)// ["3秒后出來", "2秒后出來"]
})
.catch((err)=>{
  console.log(err)
})
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM