今天,我在 ChatGPT 的幫助下繼續學習 Node.js,重點是非同步程式設計。這是 Node.js 中最重要的概念之一,我很高興能夠開始掌握它。
理論
在 Node.js 中,非同步程式設計因其非阻塞、事件驅動的架構而至關重要。這意味著文件讀取、資料庫查詢或網路請求等操作在等待結果時不會阻塞其他程式碼的執行。
我們探討了處理非同步操作的三種主要方法:
回呼: 作為參數傳遞給其他函數的函數,非同步操作完成後執行。
const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
Promises: 表示非同步操作最終完成(或失敗)及其結果值的物件。與嵌套回呼相比,Promise 允許連結並使程式碼更具可讀性。
const fs = require('fs').promises; fs.readFile('example.txt', 'utf8') .then(data => { console.log(data); }) .catch(err => { console.error(err); });
非同步/等待: 建構在 Promise 之上的語法糖,允許以同步方式編寫非同步程式碼。
const fs = require('fs').promises; async function readFile() { try { const data = await fs.readFile('example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); } } readFile();
實際任務
今天,我練習將基於回調的函數轉換為基於 Promise 的函數。
帶回調的原始碼:
const fs = require('fs'); function readFileCallback(path, callback) { fs.readFile(path, 'utf8', (err, data) => { if (err) { callback(err); return; } callback(null, data); }); } readFileCallback('example.txt', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
轉換為承諾:
const fs = require('fs').promises; function readFilePromise(path) { return fs.readFile(path, 'utf8'); } readFilePromise('example.txt') .then(data => { console.log(data); }) .catch(err => { console.error(err); });
獨立任務
我還使用 async/await 編寫了一個非同步函數,它讀取檔案的內容並將其記錄到控制台。如果發生錯誤(例如,找不到檔案),它應該捕獲錯誤並記錄它。
const fs = require('fs').promises; async function readFileAsync(path) { try { const data = await fs.readFile(path, 'utf8'); console.log(data); } catch (err) { console.error(err); } } readFileAsync('example.txt');
資源
ChatGPT 創建的所有課程均可在以下位置找到:https://king-tri-ton.github.io/learn-nodejs
以上是利用 AI 快速學習 Node.js - 第 4 天的詳細內容。更多資訊請關注PHP中文網其他相關文章!