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