温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Node.js中的回调函数怎么用

发布时间:2022-01-21 10:36:06 来源:亿速云 阅读:166 作者:iii 栏目:开发技术

这篇文章主要介绍了Node.js中的回调函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node.js中的回调函数怎么用文章都会有所收获,下面我们一起来看看吧。


Node.js中的回调函数怎么用

同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。

以下是一个最简单的例子:

function a() {
   return 1
}function b(aa) {
   return 2 + aa
}

//调用:
var c=0
c = b(a()) //A是个函数,但它又作为一个参数在B函数中被调用
console.log(c) //结果显示3

以上例子极易理解,下面再引入另一个概念:异步

看以下代码:

var a = 0function bb(x) {
   console.log(x)
}function timer(time) {
   setTimeout(function () {
       a=6
   }, time);
}

//调用:
console.log(a)
timer(3000)
bb(a)

以上代码很简单,我们需要的逻辑是,全局变量a初值为0,然后过3秒后,让它为6,然后再打印出来,看上去,上面的代码没有问题,理论上符合我们的逻辑需求,但却发现结果是这样:

0
0

咋回事?

因为JS是一种异步执行语言,尽管timer函数内让a=6了,但是JS不会死等时间结束再跳出函数,而是马上就会执行下一步语句(即调用bb函数),但这时候3秒钟根本就没结束,a还没有被重新赋值,所以打印出来还是为0。

用回调函数可以解决这个问题:

var a = 0function bb(x) {
   console.log(x)
}function timer(time, callback) {
   setTimeout(function () {
       a = 6
       callback(a);
   }, time);
}

//调用:
console.log(a)
timer(3000,bb)

这次,在timer函数中添加了一个关键字callback,意思就是说此处不是一个普通的参数,而是一个函数名,打起精神,关键的地方来了:

一般而言,函数的形参是指由外往内向函数体传递变量的入口,但此处加了callback后则完全相反,它是指函数体在完成某种使命后调用外部函数的出口!这时候应该明白什么叫”回调”了吧,也就是回头调用外部函数的意思。

在本例中,当3秒钟到了后,首先a=6,然后通过关键字callback(a)调用了函数bb(x),结果显示:

0
6

这个逻辑,符合我们的需求。

在写法上,也可以不需要定义函数bb, 直接在调用timer的时候写成function形式,把调用部分改成这样也可以,效果完全一样:

console.log(a)
timer(3000, function (x) {
   console.log(x)
})

这种写法函数名都不需要了(术语称为”匿名函数”),在nodejs代码中更为常见也更好理解,翻译成自然语言就是:定时3秒,完成后再回头调用function(x)里面的内容。

nodejs编程中大量使用了异步编程技术,这是为了高效使用硬件,同时也可以不造成同步阻塞。其实nodejs在底层还是通过多线程技术实现的异步操作,但普通用户并不需要深究它的实现方法,我们只要做好我们的异步处理即可。

关于“Node.js中的回调函数怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Node.js中的回调函数怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI