1、模塊
- File System: 操作系統(tǒng)文件的 API
- Net : 可以使用操作系統(tǒng)的網(wǎng)絡(luò)
- Process: 記載 Nodejs 進(jìn)程的一些信息
- OS : 跟操作系統(tǒng)相關(guān)的一些 API
-
os.arch()
:表示操作系統(tǒng)的架構(gòu),如 32位尚揣、64位 -
os.cpus()
:獲取當(dāng)前設(shè)備的 CPU 信息
-
2巡雨、異步: 非阻塞 I/O
- I/O: Input/Output湖员,一個(gè)系統(tǒng)的輸入和輸出
- 阻塞 I/O 和非阻塞 I/O 的區(qū)別在于系統(tǒng)接收輸入再到輸出的期間,能不能接收其他輸入
const glob = require('glob');
let result = null;
let result2 = null;
console.time('glob');
result = glob.sync(__dirname + "/**/**");
console.timeEnd('glob'); // 阻塞模式次询,執(zhí)行完耗時(shí)14.778ms
console.time('glob1');
glob(__dirname + "/**/**", function (err, res) {
result = res;
console.log(result);
})
console.timeEnd('glob1'); // 非阻塞式,執(zhí)行完耗時(shí) 2.963ms
3镰烧、異步: callback
- 回調(diào)函數(shù)格式規(guī)范:
- error - first callback
- Node - style callback
- 第一個(gè)參數(shù)是 error愉耙,后面的參數(shù)才是結(jié)果
4、異步: 事件循環(huán)
事件循環(huán)是 nodejs 實(shí)現(xiàn)非阻塞 I/O 的關(guān)鍵拌滋。
5、異步: Promise
5.1 定義
- 當(dāng)前事件循環(huán)得不到的結(jié)果猜谚,但未來的事件循環(huán)會給出結(jié)果
- 是一個(gè)狀態(tài)機(jī)制
- pending
- fullfilled/resolved
- rejected
5.2 then 和 catch
- resolved 狀態(tài)的 Promise 會回調(diào)后面第一個(gè) .then()
- rejected 狀態(tài)的 Promise 會回調(diào)后面第一個(gè) .catch()
- 任何一個(gè) rejected 狀態(tài)且后面沒有 .catch 的 Promise 败砂,都會造成瀏覽器 / node 環(huán)境的全局錯誤
- .then() 和 .catch() 會返回一個(gè)全新的 Promise,該 Promise 的最終狀態(tài)根據(jù) then 和 catch 的回調(diào)函數(shù)的執(zhí)行結(jié)果決定
- 如果回調(diào)函數(shù)的最終是 throw魏铅,該 Promise 是 rejected 狀態(tài)
- 如果回調(diào)函數(shù)的最終是 return昌犹,該 Promise 是 resolved 狀態(tài)
- 如果回調(diào)函數(shù)最終返回了一個(gè) Promise,該 Promise 會和回調(diào)函數(shù) return 的 Promise 狀態(tài)保持一致
如果出現(xiàn)多個(gè)并發(fā)請求的時(shí)候览芳,可以使用:
Promise.all([promise1, promise2])
.then(()=> {})
.catch(err=> {
console.log(err); // 此處只會捕獲第一個(gè)拋出的異常
})