系统编程
背景简述
本章内容主要围绕这 JavaScript 的异步特性展开。异步特性也是 JavaScript 于其他语言的最大差别。JavaScript 中的异步处理主要是为了解决 I/O 问题。因为 I/O 的处理时需要 CPU 需要等待。I/O 所耗费的时间和 CPU 比起来可以说是天壤地别。
我们来看看时间的概念:
JavaScript 在初期可以通过 Callback
方式实现异步。ES6 版本之后已经添加了 Promise、async await。
列出目录
代码 1:
import fs from 'fs'
const srcDir = process.argv[2]
const results = fs.readdir(srcDir)
for(const name of results) {
console.log(name)
}
概念解析:
- process 是什么?
- node.js 中 process 对象提供了当前 node.js 进程的信息,并对其进行控制。argv 是一个数组,包含启动 node.js 进程时的命令行参数
- node test.js -a describe1
- process.argv[0] 是 bin 文件的路径 /usr/local/bin/node
- process.argv[1] 是 执行的脚本文件 test.js
- process.argv[2] 是 参数 -a
- process.argv[2] 是 参数 describe1
- node.js 可以使用 import 吗?
- node.js 默认使用 require 方式,如果采用 import 方式的话,需要将 package.json 文件中的 type 设置为 module
代码 1 并不会正常工作,而是会报错:Callback muse be a function。所以需要给它添加一个 function,对数据进行处理。
在 Node.js 中有这样一个观念需要明确:错误先行。至于为什么,我们看如下三个论点。
- 任何一个程序至少包含一个 bug
- 任何一个程序可以缩短一行。
- 因此,任何一个程序可以简化为一条错误语句。
代码 2:
import fs from 'fs'
const listContents = (err, files) => {
if(err) console.error(err)
else console.log(files)
}
const srcDir = process.argv[2]
const results = fs.readdir(srcDir, listContents)
选择一组文件
在很多 node.js 项目中,我们经常看到 glob 模块。glob 是 “global” 的缩写。glob 是一个古老的 Unix 术语,用于按名称匹配一组文件。所以,我们在程序设计中很多概念是相同的,或者很多现有思想是可以借鉴的。
概念解析:
- npm glob
- https://www.npmjs.com/package/glob
- https://man7.org/linux/man-pages/man3/fnmatch.3.html
- https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html
- https://www.linuxjournal.com/content/pattern-matching-bash