用於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); });