回调,同步异步

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就发毛,这个东西就是个回调函数

你可能感兴趣的:(回调,同步异步)