Promise对象和async函数

Promise对象

    //1开始
function fna(){
    console.log('1开始');
    var p = new Promise(function(resolve, reject){        //做一些异步操作
        setTimeout(function(){
            console.log('1完毕!');
            resolve('进行2');//完成(Rejected)
        }, 6000);
        // setTimeout(function(){
        //     console.log('1失败!');
        //     reject('1没有完成');//失败
        // }, 1000);
    });
    return p;
}
 
//2开始
function fnb(data){
    console.log('2开始' + data);
    var p = new Promise(function(resolve, reject){        //做一些异步操作
        setTimeout(function(){
            console.log('2完毕!');
            resolve('进行3');
        }, 2000);
    });
    return p;
}
 //3开始
function fnc(data){
    console.log('3开始' + data);
    var p = new Promise(function(resolve, reject){        //做一些异步操作
        setTimeout(function(){
            console.log('3完毕!');
            resolve('123都完成');
        }, 2000);
    });
    return p;
}

fna()
.then(function(data){ //成功的

    return fnb(data);
})
.catch(function(data){ //失败的
    console.log(data );
})
.then(function(data){
    return fnc(data);
})
.then(function(data){
    //throw new Error('发现错误!');//捕捉错误
    console.log(data);
});

结果:

.all()方法

function cutUp(){
    console.log('1开始');
    var p = new Promise(function(resolve, reject){        //做一些异步操作
        setTimeout(function(){
            console.log('1完毕!');
            resolve('准备好1');
        }, 1000);
    });
    return p;
}
 

function boil(){
    console.log('2开始');
    var p = new Promise(function(resolve, reject){        //做一些异步操作
        setTimeout(function(){
            console.log('2完毕!');
            resolve('准备好2');
        }, 6000);
    });
    return p;
}
 
Promise
.all([cutUp(), boil()])//all 方法在所有异步操作执行完后才执行下面函数
.then(function(results){
    console.log("12准备完毕:");
    console.log(results);
});

结果:

async函数

async function asyncValue(value) { //函数前面的async关键字,表明该函数将返回一个Promise对象
    console.log('1');
    //当遇到await关键字等待 await后的函数执行完成才会继续执行
  await timeout(6000).then(function(data){
     console.log(data);
}).catch(function(data){
     console.log(data);
})

  console.log('完毕');
  return value;
}
asyncValue();//调用
function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(()=>{
         resolve('干净的碗筷');
    },ms);
  });
}

结果:

posted @ 2018-07-26 17:52  xue11hua  阅读(1063)  评论(0编辑  收藏  举报