Node - 模块与异步
2020-05-08 本文已影响0人
酷热summer
1、模块
- File System: 操作系统文件的 API
- Net : 可以使用操作系统的网络
- Process: 记载 Nodejs 进程的一些信息
- OS : 跟操作系统相关的一些 API
-
os.arch()
:表示操作系统的架构,如 32位、64位 -
os.cpus()
:获取当前设备的 CPU 信息
-
2、异步: 非阻塞 I/O
- I/O: Input/Output,一个系统的输入和输出
- 阻塞 I/O 和非阻塞 I/O 的区别在于系统接收输入再到输出的期间,能不能接收其他输入
const glob = require('glob');
let result = null;
let result2 = null;
console.time('glob');
result = glob.sync(__dirname + "/**/**");
console.timeEnd('glob'); // 阻塞模式,执行完耗时14.778ms
console.time('glob1');
glob(__dirname + "/**/**", function (err, res) {
result = res;
console.log(result);
})
console.timeEnd('glob1'); // 非阻塞式,执行完耗时 2.963ms
3、异步: callback
- 回调函数格式规范:
- error - first callback
- Node - style callback
- 第一个参数是 error,后面的参数才是结果
4、异步: 事件循环
事件循环是 nodejs 实现非阻塞 I/O 的关键。
5、异步: Promise
5.1 定义
- 当前事件循环得不到的结果,但未来的事件循环会给出结果
- 是一个状态机制
- pending
- fullfilled/resolved
- rejected
5.2 then 和 catch
- resolved 状态的 Promise 会回调后面第一个 .then()
- rejected 状态的 Promise 会回调后面第一个 .catch()
- 任何一个 rejected 状态且后面没有 .catch 的 Promise ,都会造成浏览器 / node 环境的全局错误
- .then() 和 .catch() 会返回一个全新的 Promise,该 Promise 的最终状态根据 then 和 catch 的回调函数的执行结果决定
- 如果回调函数的最终是 throw,该 Promise 是 rejected 状态
- 如果回调函数的最终是 return,该 Promise 是 resolved 状态
- 如果回调函数最终返回了一个 Promise,该 Promise 会和回调函数 return 的 Promise 状态保持一致
如果出现多个并发请求的时候,可以使用:
Promise.all([promise1, promise2])
.then(()=> {})
.catch(err=> {
console.log(err); // 此处只会捕获第一个抛出的异常
})