美文网首页
同步,异步

同步,异步

作者: haha2333 | 来源:发表于2019-08-07 18:17 被阅读0次

    js异步操作的方法:
    1.回调函数
    就是把一方法当作参数传到另一个方法里。有两种回调方式:同步回调和有异步回调

    • 同步回调
    function f2(data){
      console.log(data)
    }
    function f1(callfun){
      var a =""
      callfun(a)
      console.log("执行完毕")
    }
    f1(f2)
    

    执行顺序:执行f1->f2->f1的console
    依然是顺序执行,等待f2执行完毕再继续。同步回调的实质就是代码分离

    • 异步回调
    function f2(data){
      console.log(data)
    }
    function f1(callfun){
      var a =""
      setTimeout(callfun(a),500)
      console.log("执行完毕")
    }
    f1(f2)
    

    执行顺序:执行f1->设定f2执行的定时器->f1的console->f2
    通过定时器实现了函数的异步回调
    优点:看起来简单易懂
    缺点:不利于代码的阅读和维护,各个部分之间高度耦合。流程会很混乱,而且每个任务只能指定一个回调函数。容易陷入回调地狱。(多次回调信任问题)

    为了使多个函数可以顺序执行,使用多层次的异步回调过程中,

    doA(function(){
      doB();
      doC(function(){
        doD()
      })
      doE()
    })
    doF()  //注:BCDE都是异步操作
    

    以上代码的执行序:A->F->B->C->E->F->D

    补充:setTimeout作用,他是一个定时器,当定时器时间到了之后,环境会把回调函数挂到事件循环中,然后就等待前面的函数执行完毕,再执行他。所以定时期只能保证事件肯定在设定时间之后执行,不能保证具体执行时间。

    2.事件监听
    比如click事件,触发操作。

    3.发布订阅模式
    我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做"发布/订阅模式"(publish-subscribe pattern),又称"观察者模式"(observer pattern)。我们可以通过查看"消息中心",了解存在多少信号、每个信号有多少订阅者,从而监控程序的运行。

    jQuery.subscribe("done", f2); //首先,f2向"信号中心"jQuery订阅"done"信号。
    function f1(){
      setTimeout(function () {
        // f1的任务代码
        jQuery.publish("done"); //f1执行完成后,向"信号中心"jQuery发布"done"信号,引发f2的执行。
      }, 1000);
    } 
    jQuery.unsubscribe("done", f2); //f2完成执行后,也可以取消订阅(unsubscribe)。
    

    4.promise https://www.jianshu.com/p/0edaf787fd0b
    5.异步迭代生成器 https://www.jianshu.com/p/c99fab058b77
    6.asyc,await

    以上几种方法的比较:

    相关文章

      网友评论

          本文标题:同步,异步

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