美文网首页
大前端~JavaScript异步编程

大前端~JavaScript异步编程

作者: KK_boy | 来源:发表于2021-04-09 13:44 被阅读0次

    可以实现JavaScript异步编程的方法有:

    • 回调函数
    • 事件监听
    • 发布/订阅
    • Promise对象
    • ...

    任何函数的声明都不会产生调用。

    阻塞可能会产生页面卡顿或卡死。

    压栈,弹栈

    Eventloop只做一件事情,就是监听调用栈(Call Stack)和消息队列(Queue),依次把消息队列里的第一个任务压入到调用栈里执行,直到所有任务执行完。

    消息队列里的任务会排队等待事件循环。

    消息队列可以比喻为待办任务表,调用栈为正在执行的任务表

    注意

    • JavaScript是单线程语言,方便进行DOM操作。

    • JavaScript确实是单线程的,而浏览器却不是单线程的。(通过JavaScript调用的某些内部的API并不是单线程的,如:setTimeOut)

    • JavaScript的异步操作常见的有计时器、事件绑定、Ajax

    回调函数:所有异步调用方法的根基。

    CommonJS社区提供了Promise的规范

    promise的状态一旦被确定就不能再修改

    Promise本质上也是使用回调函数定义的异步任务执行后所需要执行的任务

    • Promise对象的then方法会返回一个全新的Promise对象

    • 后面的then方法就是为上一个then返回的Promise注册回调

    • 前面then方法回调函数的返回值会作为后面then方法回调的参数

    • 如果回调中返回的是Promise,那后面的then方法的回调会等待它的结束

    同一个Promise链条,前面的Promise的异样会一直往后传递,所以后面的catch可以捕获到。

    Promise的静态方法:resolve、reject

    Promise.all()等待所有任务结束,Promise.race()只会等待第一个任务结束

    回调队列中的任务称为 宏任务,Promise会作为微任务执行

    • .then()里的实参应该是函数,如果不是函数,就无视它。

    Generator生成器函数

    yield可以暂停生成器执行

    async await

    async是Generator的语法糖

    Generator函数的返回值是一个Generator对象

    相关文章

      网友评论

          本文标题:大前端~JavaScript异步编程

          本文链接:https://www.haomeiwen.com/subject/onvikltx.html