美文网首页
同步,异步

同步,异步

作者: 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

以上几种方法的比较:

相关文章

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • 网络请求数据并且解析的过程(推荐AFNetworking)

    demo1.http请求,get同步异步,post同步异步get同步 get异步 post异步 2.session...

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

  • 存储

    同步 Set 异步 Get 同步 Get 异步 Get

  • GCD的几种创建方式及基本使用

    同步函数 同步函数+主队列 同步函数+串行队列 同步函数+并发队列 异步函数 异步函数+主队列 异步函数+串行队列...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • 📕 史上最实用的JS笔记

    1. 同步与异步 同步和异步的区别是什么?分别举一个同步和异步的例子 同步会阻塞代码执行,而异步不会阻塞代码执行。...

  • GCD 相关函数

    串行同步 串行异步 并行同步 并行异步 主队列同步 会死锁 主队列异步 异步处理耗时,回主线程刷新UI 栅栏函数 ...

  • iOS多线程小结

    同步异步串行并行 同步串行:不开启线程 同步并行:不开启线程 异步串行:最多开启一个线程 异步并行:开启线程 同步...

网友评论

      本文标题:同步,异步

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