Node.js 异步编程(附几个小练习题学会分析代码执行顺序)
1. 同步API,异步API
同步API:只有当前API执行完成后,才能继续执行下一个API
console.log('before');
console.log('after');
异步API:当前API的执行不会阻塞后面代码的执行
2. 同步API和异步API的区别(获取返回值)
同步API可以从返回值中拿到API执行的结果,但是异步API是不可以的
上图异步代码输出 msg 得到的是undefined
3. 回调函数(拿到异步API的执行结果)
回调函数: 自己定义函数,让别人去调用
4. 通过回调函数获取异步API执行结果
异步编程是 JavaScript 的一个特色
凡是需要得到一个函数内部异步操作的结果,如:setTimeout,readFile,writeFile,readdir以及 ajax等等。往往异步 API,都伴有一个回调函数。
这种情况必须通过:回调函数
例1:
例2:
function add(x, y, callback) {console.log(1)setTimeout(function() {var ret = x + ycallback(ret)}, 1000)
}// 如何拿到结果呢?
// 调用者就要关心这个 callback
// 1 秒钟之后 就会得到 10+ 20 的结果add(10, 20, function(ret) {console.log(ret)
})
在 function add(x, y, callback) 中:
- callback 就是回调函数
- var x = 10
- var y = 20
- var callback = function(ret) { console.log(ret) }
5. 同步API,异步API的区别(代码执行顺序)
同步API从上到下依次执行,前面代码会阻塞后面代码的执行
异步API不会等待API执行完成后再向下执行代码
6. 代码执行顺序的分析
例1:
setTimeout(function() { // 这是个异步APIconsole.log(2);console.log('hello');
}, 0)
console.log(3);
上述代码的执行结果是: 3 2 hello
原因:代码在执行过程中不会等待定时器,即使时间是0 秒,也不会等待。仍然会执行完所有的 同步代码,再执行 异步函数
例2:
function add(x, y) {console.log(1);setTimeout(function() {var ret = x + yreturn ret}, 1000)console.log(3); //这时函数add(x, y)就结束了,但是由于在这个 add(x, y)函数里面没有返回值,所以return undefined
}
// 先打印1, 再打印3 ,最后打印undefined。
console.log(add(10, 20));
例3:
// 下面用数字表明执行步骤
function add(x, y) {var ret // 1.console.log(1); //2. 打印 1setTimeout(function() {console.log(2); //5.打印 2ret = x + y // 6.}, 1000)console.log(3); //3. 打印 3return ret //4. ret 只声明,未赋值,则是 undefined
}
console.log(add(10, 20));// 打印 1 3 undefined 2
7. Node.js中的异步API
读取文件操作
和 定时器类似,都是需要一定时间的操作。所以文件读取的结果不能通过返回值的形式拿到,需要通过回调函数。
而第二个参数就是回调函数,在文件读取完成之后,系统会来调用这个回调函数,并且在调用回调函数的时候,会将文件的读取结果通过回调函数参数的形式传递过来。
事件监听的API
事件处理函数就是回调函数,我们在为服务器对象去添加请求事件的时候,这个事件处理函数我们没有主动地调用过,是因为事件处理函数的执行是在事件发生的时候,系统去调用的。
系统去调用的时候,给我们传递了两个参数,分别是请求对象和响应对象。所以我们在定义这个函数的时候,才可以通过形参的方式接收这两个对象
Node.js 异步编程(附几个小练习题学会分析代码执行顺序)相关推荐
- 57 Node.js异步编程
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...
- Node.js异步编程~超级详细哦
下面是对Node.js异步编程的整理,希望可以帮助到有需要的小伙伴~ 文章目录 同步API,异步API 同步API,异步API的区别 获取返回值的方式不同 代码执行顺序不同 Node.js中的异步AP ...
- node.js异步编程
目录 1.同步API 2.异步API 回调地狱 用promise解决回调地狱 异步函数 Node服务器端编程 1.同步API 只有在当前的API执行完成后,才执行下一个API.代码的执行方式是按照代码 ...
- 前端学习(1319):node.js异步编程
test,js function getMsg(callback) {setTimeout(function() {callback({msg: 'hello node js'})}, 2000) } ...
- await原理 js_深入浅出node.js异步编程 及async await原理
最近看了一些文章对于async await的原理及概念的解析,我觉得很多时候有些不太准确. 尤其是对于async和await会阻塞线程的说法更是有些扯淡了,JS本身就是单线程的语言如果await会阻塞 ...
- Node.js 异步编程之 Callback介绍
原文:http://www.jb51.net/article/63070.htm ------------------------------------- Node.js 基于 JavaScript ...
- Node.js高级编程【一】node 基础
目录 一.Node 基础 1.课程概述 2.Node.js 架构 3.为什么是Node.js ? 4.Node.js 的 异步IO 5.Node.js 主线程是单线程 6.Node.js 应用场景 7 ...
- promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
[简答题]一.谈谈你是如何理解JS异步编程的,EventLoop.消息队列都是做什么的,什么是宏任务.什么是微任务? 如何理解JS异步编程 众所周知JavaScript语言执行环境是"单线程 ...
- js 异步执行_JS Asynchronous — JS 异步编程极简史
Asynchronous JS 异步编程极简史,这个故事网上已经很多人有了自己的讲述. Event Loop 解释了 Node.js 为何以及如何实现单线程服务模型和 Event Loop.对于 JS ...
最新文章
- 第6章——广度优先搜索
- sleuth微服务整合Zipkin
- 用Python实现冒泡排序
- ANN:DNN结构演进History—RNN
- Teams Bot开发系列:Bot验证
- asp.net 时间显示格式
- 论文浅尝 - AAAI2020 | 迈向建立多语言义元知识库:用于 BabelNet Synsets 义元预测...
- 外设驱动库开发笔记0:EPD总体设计
- android html footer 固定,前端小技巧之footer固定
- JSTL标签用法:c:choosec:forEachc:ifc:whenc:set
- 解决【npm ERR! Unexpected end of JSON input while parsing near '...sh_time:141072930277'】方案...
- n型半导体和p型半导体的区别_NPN型三极管和PNP型三极管有什么区别?
- bmp 和JPG有什么区别
- echarts中中国地图飞机路线使用
- 【DDR3_Electrical Characteristics and AC Timing】_ Setup,Hold and Slew Rate Derating
- 离谱!全公司电脑Alt键被抠掉,就为防员工摸鱼...
- ViewData、ViewBag和 TempData
- 银河麒麟V10安装与运行人大金仓数据库
- 盘点Linux操作系统的十大版本
- JavaGUI编程 -- 窗口监听事件和键盘监听事件(AWT)