美文网首页
回调,同步异步

回调,同步异步

作者: debt | 来源:发表于2017-05-13 11:18 被阅读11次

    nodejs学习笔记

    标签:node 异步 回调 单线程


    1. callback 最简单的回调

    function test(sth){
        console.log(sth)
    }
    function testCallback(callback,sth){
        var sth=sth+"is cool";
        callback(sth)
    }
    testCallback(test,"jade")
    

    注意回调的理解:

    将后续逻辑封装的到一个起始函数中作为参数,逐层嵌套。
    其实仔细想想一般场景就是在一个函数中先加工参数,再把加工好的参数传给另一个函数。

    2. 同步和异步的理解:

    同步:想象成向老板查询东西,老板接到电话说我帮你查查啊,就查啊查,查到结果了就告诉你
    异步:打电话查东西,老板说我查到了再打电话给你

    差不多就这个意思,同步单线程顺序执行,浏览器中加载代码就是同步的,前面写个死循环,会阻塞后面代码执行(浏览器中虽然可以并行下载,但不能并行执行)

    顺序执行,下面代码当然执行结果是2

    var a=1;
    function add(){
        a++
    }
    function print(){
        console.log(a)
    }
    add()
    print()
    

    如果我们将add函数改造一下,加入延时会怎么样?

    var a=1;
    function add(){
        //a++
        setTimeout(function(){
            a++
        },0)
    }
    function print(){
        console.log(a)
    }
    add()
    print()
    

    酱紫,会打印什么?
    打印出来的是1?黑人问号

    理解下啊,浏览器遇到setTimeout就会把它放到一个延时序列里,这个延时序列的执行时机时其他代码执行完毕,so延时0秒也不执行就不奇怪了吧

    如何避免这个问题,如何避免这个问题,当然是把函数加到setTimeout的里面咯,like this:

    function add(callback){
        //a++
        setTimeout(function(){
            a++
            callback()
        },0)
    }
    

    不要看到calbback就发毛,这个东西就是个回调函数

    相关文章

      网友评论

          本文标题:回调,同步异步

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