美文网首页
浅析异步回调

浅析异步回调

作者: Long_Dark | 来源:发表于2020-03-17 21:11 被阅读0次

最原始的写法-同步写法

所有操作同步单线进行

//最原始的写法-同步写法
 
f1(); //耗时很长,严重堵塞
f2(); //f2需要用用到f1
f3(); //导致f3执行受到影响

异步回调

//改进版-异步写法
function f1(callback){
  setTimeout(function () {
    // f1的任务代码
    callback();
  }, 1000);
}
f1(f2); //
f3();

举个例子

//举例
var a=0;
var b=0;
function f1(){
  for(var i=0; i<100000000; i++){
  a += i;
  }
  b = a+1;
  console.log(a);
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1()  //  4999999950000000  这一步拉长了时间
f2()  //  4999999950000001
f3()  //  abc  

需要等f1() f2()执行完后才会输出abc 如果f1()f2()执行时间很长,f3()就会一直延迟

异步

这里因为f1()的执行时间太长,所以将f1异步放到最后去执行

var a=0;
var b=0;
function f1(callback){
  setTimeout(function(){   
    for(var i=0; i<100000000; i++){
    a += i;
    }
    b = a+1;
    console.log(a);
    callback()
  },0)
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1()  // 最后出现,用时很长 4999999950000000
f2()  // 0 
f3()  // abc

因为异步了,在执行f2()的时候,a和b的值都是0,所以f2()最后是0,但这不是我们想要的结果,我们想同时不影响整个执行,又要得到正确的f2()结果

异步回调

var a=0;
var b=0;
function f1(callback){
  setTimeout(function(){
    for(var i=0; i<100000000; i++){
      a += i;
    }
    b = a+1;
    console.log(a);
    callback()
  },0)
}
function f2(){console.log(b)}
function f3(){console.log('abc')}
f1(f2)
f3() //立刻输出abc 然后过一段时间才输出f1(f2) 4999999950000000 4999999950000001

按这样的步骤理解起来应该就比较清晰了

相关文章

  • 浅析异步回调

    最原始的写法-同步写法 所有操作同步单线进行 异步回调 举个例子 需要等f1() f2()执行完后才会输出abc ...

  • 异步的实现

    异步的三种实现方式: 回调函数事件Promise 回调函数 回调函数不一定是异步 但是异步一定是回调函数。 事件 ...

  • 同步、异步

    同步:等待结果异步:不等待结果 注意,异步常常伴随回调一起出现,但是异步不是回调,回调也不一定是异步。 【时序图】...

  • 异步和回调

    异步 异步就是「不等结果」,直接进行下一步怎么拿到结果回调可以拿到结果 回调 「回调是一种拿异步结果的方式」「回调...

  • 你不知道的JS(中卷)第七章

    第七章 回调 回调是js异步的基本单元。随着js越来越成熟,对于异步编程的发展,回调已经不够用了。回调表达异步流的...

  • Dart 语法

    回调 dart定义回调 dart使用回调 延时 异步

  • nodeJS回调函数

    NodeJS异步编程的直接体现就是回调函数。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。回调函...

  • Node.js 回调函数

    Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调...

  • 14.回调地狱与 Promise

    回调地狱 为了保证异步代码的执行顺序,将异步代码嵌套到回调函数中,当异步的方法多了,就会产生回调地狱(callba...

  • 异步处理:回调函数与promise

    前置知识回调可以是同步也可以是异步,异步必须放在回调里执行,也就是对于一个异步任务只有回调函数里的才是异步的,比如...

网友评论

      本文标题:浅析异步回调

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