课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》
课程章节:第2章 【深入理解KOA】Koa2的那点事儿与异步编程模型
视频:2-8 深入理解async和await
课程讲师: 七月
课程内容:
app.use((ctx, next) => { console.log('hello world 1'); const a = next() a.then((res) => { console.log(res) }) console.log('hello world 2'); }) app.use((xtx, next) => { console.log('hello world 3'); //next() console.log('hello world 4'); return 'abc' }) //输出为: hello world 1 hello world 3 hello world 4 hello world 2 abc
//异步终极解决方案:async、await app.use(async (ctx, next) => { console.log('hello world 1'); const a = await next() console.log(a) console.log('hello world 2'); }) app.use((xtx, next) => { console.log('hello world 3'); //next() console.log('hello world 4'); return 'abc' }) //输出为: hello world 1 hello world 3 hello world 4 abc hello world 2
await可以理解为“求值关键字”、await可以阻塞线程
读文件、发送http请求、操作数据库都是异步的
//需要安装的包 "dependencies": { "axios": "^1.1.3", "basic-auth": "^2.0.1", "bcryptjs": "^2.4.3", "jsonwebtoken": "^8.5.1", "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", "koa-router": "^12.0.0", "koa-static": "^5.0.0", "lodash": "^4.17.21", "mysql2": "^2.3.3", "npm-check": "^6.0.1", "require-directory": "^2.1.1", "sequelize": "^6.25.3", "validator": "^13.7.0" }
app.use((xtx, next) => { const axios = require('axios') const start = Date.now() const res = axios.get('http://www.baidu.com') const end = Date.now() console.log(end - start) }) //输出结果可能是0、1、2 表示时间差非常小 代码不等待http的返回结果,直接向下运行
app.use(async (xtx, next) => { const axios = require('axios') const start = Date.now() const res = await axios.get('http://www.baidu.com') const end = Date.now() console.log(end - start) }) //输出结果是三位数,表示等待了http的返回结果
课程收获:
七月老师由浅入深的讲课技巧太棒了,尤其是将async、await的时候,讲的很清楚。尤其是提到“await可以理解为求值关键字”的时候。以前会用,但是没概念,现在听到七月老师的讲解,有一种‘通了’的感觉。视频最后七月老师提到async await是从c#来的。
七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。