转自:http://www.runoob.com/nodejs/nodejs-tutorial.html

Node.js 异步编程的直接体现就是回调。

异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

阻塞代码实例

创建一个文件 input.txt ,内容如下:

www.runoob.com

创建 main.js 文件, 代码如下:

var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程序执行结束!");

以上代码执行结果如下:

node main.js

非阻塞代码实例

创建一个文件 input.txt ,内容如下:

www.runoob.com

创建 main.js 文件, 代码如下:

var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");

以上代码执行结果如下:

$ node main.js

以上两个实例我们了解了阻塞与非阻塞调用的不同。第一个实例在文件读取完后才执行完程序。 第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。

因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

在 Node 应用程序中,执行异步操作的函数将回调函数作为最后一个参数, 回调函数接收错误对象作为第一个参数。

接下来让我们来重新看下前面的实例,创建一个 input.txt ,文件内容如下:

菜鸟教程官网地址:www.runoob.com

创建 main.js 文件,代码如下:

var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString()); }); console.log("程序执行完毕");

以上程序中 fs.readFile() 是异步函数用于读取文件。 如果在读取文件过程中发生错误,错误 err 对象就会输出错误信息。

如果没发生错误,readFile 跳过 err 对象的输出,文件内容就通过回调函数输出。

执行以上代码,执行结果如下:

程序执行完毕
菜鸟教程官网地址:www.runoob.com

接下来我们删除 input.txt 文件,执行结果如下所示:

程序执行完毕
Error: ENOENT, open 'input.txt'

因为文件 input.txt 不存在,所以输出了错误信息。

转载于:https://www.cnblogs.com/sharpest/p/8045856.html

17.Node.js 回调函数--异步编程相关推荐

  1. node.js 回调函数

    Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数, ...

  2. [Node.js]回调函数

    简介 Node.Js异步编程的直接表现方式就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了.回调函数在完成任务后就会被调用,Node使用了大量的回调函数,node所有api都支持 ...

  3. Node.js中的异步编程,个人理解及分化讲解

    Nodejs Nodejs本身是单线程的,底层核心库是Google开发的V8引擎,而主要负责实现Nodejs的异步功能的是一个叫做libuv的开源库,github上可以找到它. 异步编程 Nodejs ...

  4. Node.js —— 回调函数callback

    一.什么是回调函数 1.回调函数是作为参数传递给另一个函数 2.回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码 3. 函数运行完成,再执 ...

  5. Node.js回调函数

  6. js回调函数获取异步返回值

    js回调函数获取异步返回值 1.尝试获取异步返回值 function test(){var res = 0;setTimeout(function(){res = 1;},1000)return re ...

  7. html js 回调函数,js中回调函数的学习笔记

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你" ...

  8. js 回调函数小例子

    js 回调函数小例子 1 <script> 2 //将函数作为另一个函数的参数 3 function test1(){ 4 alert("我是test1"); 5 } ...

  9. 【转】JS回调函数--简单易懂有实例

    JS回调函数--简单易懂有实例 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is ...

最新文章

  1. P2642 双子序列最大和(线性DP)(最大子段和 + 合唱队列)
  2. Html.Action,Html.RenderAction,Html.ActionLink,Url.Action区别
  3. [导入]XmlReader 读取器读取内存流 MemoryStream 的注意事项
  4. 数据库更新记录,但程序查不到新记录问题
  5. [云炬创业基础笔记]第十一章创业计划书测试9
  6. Lintcode9 Fizz Buzz solution 题解
  7. Flask项目--注册
  8. linux usb键盘驱动详解
  9. python 二分查找函数_Python基础14_递归函数,二分查找
  10. APICloud构建APK个文件作用说明
  11. 前端安全 XSS跨站脚本攻击-CSRF跨站请求伪造攻击
  12. Windows10下载CUDA总是下载失败的解决方案
  13. 使用tf2的saved_model进行推理
  14. 阿里巴巴本地生活——上海饿了么配送一面(一小时)
  15. html中背景条纹效果,使用CSS线性渐变 制作条纹背景
  16. python 容联云测试短信接口
  17. opencv函数cv2.warpAffine 和 cv2.warpPerspective 的理解和复现
  18. 位图文件, JPG格式,PNG格式
  19. 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
  20. 概率算法c 语言,c语言概率算法简介(Introduction to probabilistic algorithms for c languages).doc...

热门文章

  1. Nginx在开发中常用的基础命令
  2. Winform中设置ZedGraph多条Y轴时与多条曲线一一对应
  3. 爬虫进行request请求时User-Agent怎样写
  4. Python中range对象的使用以及打印九九乘法表
  5. 从实例入手学习Vue-router的使用-实现音乐导航菜单切换
  6. js三元运算符_这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
  7. 二叉树链表结构表示法
  8. USACO翻译:USACO 2014 DEC Silver三题
  9. java8升级java11到底敢不敢?
  10. vim基础-一般模式