es6 入坑笔记(四)---异步处理

promise

用于js的异步处理

形式:

1.申明一个promise的对象

let p = new Promise(function(成功时的参数,失败时的参数){
  if(。。。。){
    成功时的参数(成功时想传的值);
  }else{
    失败时的参数(失败时想传的值);

  }
});
调用then方法
p.then(

//第一个为成功时调用的回调函数
(成功时想传的值)=>(。。。),

/第二个为失败时调用的回调函数
(失败时想传的值)=>(。。。),
);

eg:

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)));

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

 

posted @ 2018-11-07 14:57  一腔&孤勇  阅读(118)  评论(0编辑  收藏  举报