es6 入坑筆記(四)---異步處理

promise

用於js的異步處理數組

形式:promise

1.申明一個promise的對象異步

let p = new Promise(function(成功時的參數,失敗時的參數){
  if(。。。。){
    成功時的參數(成功時想傳的值);
  }else{
    失敗時的參數(失敗時想傳的值); 函數

  }
});
調用then方法
p.then(spa

//第一個爲成功時調用的回調函數
(成功時想傳的值)=>(。。。),code

/第二個爲失敗時調用的回調函數
(失敗時想傳的值)=>(。。。),
);對象

eg:blog

let a=1; let p = new Promise(function(r,rej){ if(a == 1){ r (2**3); }else{ rej("失敗"); } }); p.then( (res)=>(console.log(res)),//輸出8
    (fail)=>(console.log(fail)) );

then的另外一種形式(推薦)回調函數

p.then(
(res)=>(console.log(res))
).catch((fail)=>(console.log(fail)));io

用catch 來捕捉錯誤時回調

 

Promise.resolve(參數);

將參數轉化爲一個promise對象,resolve狀態,成功狀態

eg:

Promise.resolve('aaa');

等價於

new Promise((suc)=>(

  suc('aaa');

));

Promise.reject(參數);

將參數轉化爲一個promise對象,reject狀態,失敗狀態

 

Promise.all([p1,p2,p3...]);

將一堆promise對象扔進一個數組內,打包成一個promise對象

只有數組內全部的狀態都爲成功狀態時Promise.all才處於成功狀態

 

Promise.race([p1,p2,p3...]);

將一堆promise對象扔進一個數組內,打包成一個promise對象

只要數組內有一個元素的狀態爲成功狀態時Promise.race處於成功狀態

 

then的連續調用

let a=1;
let b=1;

new Promise((suc,fail)=>{ setTimeout(() =>{ if(a==1){ suc('登錄成功'); }else{ fail('登錄失敗!!!'); } },1000);}).then((res) => { console.log("成功登錄,開始獲取用戶信息!"); return new Promise((suc,fail) =>( setTimeout(() =>{ if(b==1){ suc({ name:"zjj", age:18, sex:"man" }); }else{ fail('獲取失敗!!!'); } },1000)))}).then((res)=>{ console.log(res);}).catch( (fail)=>{ console.log(fail); });

相關文章
相關標籤/搜索