ES6基础入门教程(十六)promise异步队列

介绍


es6中加入了promise来统一规范异步行为。promise中可以接收两个参数,res代表成功获得异步的值以后运行什么方法,rej代表失败以后运行什么方法。

let timer = new Promise((res,rej)=>{
    setTimeout(()=>{
        res("promise");
    },1000)
})
//直接把方法名传入promise对象即可
function res(val){
    console.log(val)
}

promise对象的缺点:


1.创建的时候就会立刻执行;
2.一旦开始就不能停止;
3.必须通过catch返回错误,否则不会弹出错误。

// 这样的写法是错的,因为Promise对象创建的时候就会立即执行
let timer = new Promise((res,rej)=>{
    setTimeout(()=>{
        console.log("promise");
    },1000)
})

promise 在处理多个异步函数执行的时候,有很大的优势,
尤其是他在处理正确和错误的时候,分的特别明确,
他唯一的缺点是当你需要一个队列的时候,你就需要一个then一个then往下写,
非常难受。

这里就为es7中async和await的诞生埋下了伏笔。

let timer1 = function(){
    let p = new Promise((res,rej)=>{
        setTimeout(()=>{
            console.log("我是timer1");
            // res必须包含,没有这个东西你的函数触发.then
            // 表示成功后返回的内容
            res('timer1成功后返回的内容');
        },1500)
    })
    return p;
}
let timer2 = function(){
    let p = new Promise((res,rej)=>{
        setTimeout(()=>{
            console.log("我是timer2");
            res('timer2成功后返回的内容');
        },500)
    })
    return p;
}
let timer3 = function(){
    let p = new Promise((res,rej)=>{
        setTimeout(()=>{
            console.log("我是timer3");
            res('timer3成功后返回的内容');
        },1000)
    })
    return p;
}

// 单个调用
timer1().then((data)=>{
    console.log(data);
})

// 连续调用
timer1().then((data)=>{
    console.log(data);
    return timer2();
}).then((data)=>{
    console.log(data);
    return timer3();
}).then((data)=>{
    console.log(data);
})

//通过all方法调用 注意 这个方式是并行执行的 无法决定顺序
Promise.all([timer1(), timer2(), timer3()]).then(function(results){
    console.log(results);
});

另外这里再介绍两个不太常用的东西:


1.跟then相对的方法,是catch,也可以一个catch接着一个往下写,是一样的。

2.然后all方法,是按照队列里面速度最慢的那个去执行的,
他还有一个race方法,是谁速度快先执行谁,但是还是并行的,无法解决队列的问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你不知道JS:异步 第三章:Promises 在第二章,我们指出了采用回调来表达异步和管理并发时的两种主要不足:缺...
    purple_force阅读 2,126评论 0 4
  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,735评论 1 56
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 2,755评论 0 5
  • 你不知道JS:异步 第三章:Promises 接上篇3-1 错误处理(Error Handling) 在异步编程中...
    purple_force阅读 1,435评论 0 2
  • 如果浏览已经有了Promise对象,那么页就说明浏览器的js引擎里已经有了Promsise队列,这样就可以利用Pr...
    羊烊羴阅读 530评论 0 0