美文网首页
JS中的异步编程

JS中的异步编程

作者: Leonard被注册了 | 来源:发表于2019-12-03 23:54 被阅读0次

    JS中的同步编程和异步编程

    • 同步编程:任务是按照顺序依次处理,当前这件事没有彻底做完,下一件事是执行不了的
    • 异步编程:当前这件事没有彻底做完,需要等待一段时间才能继续处理,此时我们不等,继续执行下面的任务,当后面的任务完成后,再去把没有彻底完成的事情完成
    • JS中常见的异步编程方式
      1.所有的事件绑定都是异步编程 xxx.onclick=function(){}
      2.所有的定时器都是异步编程 setTimeout(function(){},1000)
      3.AJAX中一般都使用异步编程处理
      4.回调函数也算是异步编程
      5.Promise(async/await)
      6.process.nextTick
      7.Node中fs可以进行异步的I/O操作

    定时器:设定一个定时器,并且设定了等到的时间,当到达执定的时间,浏览器会把对应的方法执行

    • 常用的定时器

      • setTimeout([function],[interval])
      • setInterval([function],[interval])
      • [function]:到达时间后执行的方法(设置定时器的时候方法没有执行,到时间浏览器帮我们执行),[interval]:时间因子(需要等到的时间 MS)
      • setTimeout是执行一次的定时器,setInterval是可执行多次的定时器
    • 清除定时器

      • clearTimeout / clearInterval:这两个方法中的任何一个都可以清除用任何方法创建的定时器
        1.设置定时器会有一个返回值,这个值是一个数字,属于定时器的编号,代表当前是第几个定时器(不管是基于setTimeout还是setInterval创建定时器,这个编号会累加)
        2.clearTimeout([序号])/clearInterval([序号]):根据序号清除浏览器中设定的定时器
    let count = 0;
    let timer = setInterval(() => {
        count++;
        console.log(count);    // 1 2 3 4 5
        if (count === 5) {
            //=>清除定时器
            clearTimeout(timer);
        }
    }, 1000);
    console.log(timer);    // 1
    

    回调函数:把一个函数A当做实参专递给另外一个函数B,在B方法执行的时候,把A执行了,这种机制叫做 “回调函数机制”

    1.根据需求回调函数可以被执行N多次
    2.不仅可以把回调函数执行,还可以给传递的回调函数传递实参,这样在回调函数中设置形参(或者使用ARG)接收即可
    3.还可以改变回调函数中的THIS指向
    4.可以在宿主函数(它在哪执行的,它的宿主函数就是谁)中接收回调函数执行的返回结果


    浏览器是如何规划同步异步机制的

    1.浏览器是多线程的,JS是单线程的(浏览器只给JS执行分配一个线程):单线程的特点就是一次只能处理一件事情
    2.JS在单线程中实现异步的机制,主要依赖于浏览器的任务队列完成的。浏览器中有两个任务队列(主任务队列、等待任务队列
    3.在主任务队列自上而下执行的过程中,如果遇到一个异步操作任务,不会立即执行,而是将其放至等待任务队列中进行等待
    4.当主任务队列中的任务完成之后,才会到等待任务队列中进行查找任务
    5.等待任务队列中谁先达到条件了(假设寻找时,多数都达到条件了,则先达成条件的优先),就把该任务重新放到主任务队列中执行,执行完毕后再去等待队列中查找,以此类推

    相关文章

      网友评论

          本文标题:JS中的异步编程

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