首页 > Web开发 > 详细

js异步编程

时间:2019-02-15 10:55:14      阅读:196      评论:0      收藏:0      [点我收藏+]

Promise

Promise是一个构造函数,方法有:all、reject、resolve、then、catch

resolve:成功

reject:失败

(复制到控制台查看运行结果)

function runAsync1(){
    var p = new Promise(function(resolve, reject){
        // 做一些异步操作
        setTimeout(function(){
            console.log(‘异步任务1执行完成‘);
            resolve(‘随便什么数据1‘);
        }, 1000);
    });
    return p;            
}
function runAsync2(){
    var p = new Promise(function(resolve, reject){
        // 做一些异步操作
        setTimeout(function(){
            console.log(‘异步任务2执行完成‘);
            resolve(‘随便什么数据2‘);
        }, 2000);
    });
    return p;            
}
function runAsync3(){
    var p = new Promise(function(resolve, reject){
        // 做一些异步操作
        setTimeout(function(){
            console.log(‘异步任务3执行完成‘);
            resolve(‘随便什么数据3‘);
        }, 2000);
    });
    return p;            
}

runAsync1()
.then(function(data){
    console.log(data);
    return runAsync2();
})
.then(function(data){
    console.log(data);
    return ‘直接返回数据‘;  // 这里直接返回数据
})
.then(function(data){
    console.log(data);
});

all:并行执行,谁跑得慢,以谁为准进行回掉

Promise
.all([runAsync1(), runAsync2(), runAsync3()]) // 并行
.then(function(results){
    console.log(results);
});

race:并行执行,谁跑得快,以谁为准进行回掉

Promise
.race([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
    console.log(results);
});

 

function getNumber(){
    var p = new Promise(function(resolve, reject){
        // 做一些异步操作
        setTimeout(function(){
            var num = Math.ceil(Math.random()*10); // 生成1-10的随机数
            if(num <= 5){
                resolve(num); // 成功,获取数字
            }
            else{
                reject(‘数字太大了‘); //失败,传递参数
            }
        }, 2000);
    });
    return p;            
}

getNumber()
.then(
    function(data){ // 成功
        console.log(‘resolved‘);
        console.log(data);
    }, 
    function(reason, data){ // 失败
        console.log(‘rejected‘);
        console.log(reason);
    }
);
// 这个和上面功能一样,但是上面有异常不会卡死
getNumber()
.then(function(data){
    console.log(‘resolved‘);
    console.log(data);
})
.catch(function(reason){
    console.log(‘rejected‘);
    console.log(reason);
});

 

 

async/await

 

参考资料

https://www.cnblogs.com/whybxy/p/7645578.html

 

未完待续。。。

js异步编程

原文:https://www.cnblogs.com/fogmisty/p/10382284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!