浅谈Nodejs中的callback回调


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下Nodejs中的callback回调。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

推荐学习:《nodejs 教程》

什么是callback? 很显然,字面意思就是回调

那为什么在Node中需要回调操作呢?了解过Node的同学可能会知道,就是为处理异步操作的结果。

下面就是针对这个问题来详细说一下:

在说异步操作的callback回调之前,我们先看一下同步的操作模式:

1

2

3

4

5

function processData () {

  var data = fetchData ();

  data += 1;

  return data;

}

这种同步模式一般情况下可以正常工作,在其他开发环境下这种操作也是很典型的。然后可以明显的看到fectData方法如果在加载数据的时候很耗时,就会造成在数据同步加载完成之前整个程序阻塞的情况。

Node.js是一个异步的操作处理的平台,其使用callback回调的形式将不会被类似于文件I/O操作等阻塞。一个回调函数就是在一个给定的任务执行完成之后执行的函数;这种方式可以避免一些阻塞的情况,同时允许其他的代码继续执行。

我们使用Node.js的回调的形式去处理上面的同步操作fetchData耗时的情况:

1

2

3

4

5

6

7

8

9

10

function processData (callback) {

  fetchData(function (err, data) {

    if (err) {

      console.log("An error has occurred. Abort everything!");

      return callback(err);

    }

    data += 1;

    callback(data);

  });

}

一开始看的话,确实会觉得有些复杂,不太容易理解,但是确实很重要,因为回调处理异步操作是Node.js的基础。

callback回调的意思就是:你的异步操作完成之后,你就执行我的callback回调里面的内容。

Node.js这种回调处理异步操作的形式允许我们尽可能多的处理并发操作(操作类似于IO操作)

举个例子:

在一个web服务上,前面有几个请求,由于某种原因阻塞了,同时之后还会有成百上千的请求正在发出;

Node.js会如何处理这种异步阻塞的情况呢?

其会执行异步的执行阻塞查询,使之后的查询请求可以正常工作,而不是说等待前面的阻塞请求结束之后,才去处理之后的请求。

下面是是使用异步函数的典型格式:

1

2

3

4

5

6

7

8

9

10

11

12

function asyncOperation ( a, b, c, callback ) {

  // ... lots of hard work ...

  if ( /* an error occurs */ ) {

    return callback(new Error("An error has occurred"));

  }

  // ... more work ...

  callback(null, d, e, f);

}

 

asyncOperation ( params.., function ( err, returnValues.. ) {

  //This code gets run after the async operation gets run

});

callback一般是异步函数的做后一个参数,当异步操作结束之后,去调用这个callback

一般情况下,callback的第一个参数是error

如果异步操作遇到了错误,就会去调用callback,第一个参数是一个Error对象;反之,第一个errornull,其他参数正常返回。

英文原文地址:https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/

更多编程相关知识,请访问:编程视频!!

以上就是浅谈Nodejs中的callback回调的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

深入了解nodejs中的mongoose工具

windows环境下怎么安装nodejs

nodejs设置node_env时发生错误怎么解决?

10个面向开发人员的顶级nodejs框架

nodejs的爬虫框架superagent

如何查看nodejs是否安装成功

浅谈nodejs中的模块规范

nodejs怎么结束进程

node.js访问sql数据库的方法

nodejs学习之了解域名解析模块dns

更多相关阅读请进入《nodejs》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...