首頁  >  文章  >  web前端  >  Node.js 中的非同步模式 - Node.js 教學 - 第 6 部分

Node.js 中的非同步模式 - Node.js 教學 - 第 6 部分

DDD
DDD原創
2024-09-20 18:46:02743瀏覽

Async Patterns in Node.js - Node.js Tutorial - Part 6

Node.js 中的非同步模式

Node.js 在單執行緒事件驅動架構上運行,這表示它可以同時處理許多操作,而不會阻塞主執行緒。這對於創建可擴展的應用程式至關重要,其中 I/O 操作(讀取檔案、查詢資料庫等)等任務需要非同步發生,以避免阻塞其他程式碼的執行。

編寫非同步程式碼與同步程式碼

同步碼

同步程式碼一次執行一個步驟,這意味著每個步驟必須完成才能進入下一個步驟。如果操作緩慢(例如讀取大檔案或查詢資料庫),這可能會阻塞主執行緒。

範例(同步程式碼):

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
  • 問題:如果readFileSync需要很長時間(例如檔案很大),整個應用程式將在這段時間內被阻塞。

非同步程式碼

另一方面,非同步程式碼不會阻塞主執行緒。程式不會等待操作完成,而是繼續執行並在準備就緒時處理非同步操作的結果。

範例(非同步程式碼):

const fs = require('fs');
// Call Back
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log('This will log before the file content!');
  • 在本例中,檔案是非同步讀取的,程式不會阻塞; console.log('This will log before the file content!') 行在檔案仍在讀取時執行。

何時使用同步與非同步

  • 同步程式碼適用於不關心效能的小任務或腳本。
  • 非同步程式碼非常適合 I/O 密集型應用程式(例如 Web 伺服器),在這些應用程式中,您不希望在等待資料庫查詢或 HTTP 請求等操作時阻塞主執行緒。

非同步/等待

async/await 在 ES2017 (Node.js 7.6+) 中引入,是建構在 Promise 之上的語法糖。它允許以類似同步的方式編寫非同步程式碼,使其更具可讀性且更易於維護。

範例(非同步/等待):

   const fs = require('fs').promises;

   async function readFile() {
     try {
       const data = await fs.readFile('file.txt', 'utf8');
       console.log(data);
     } catch (err) {
       console.error(err);
     }
   }

   readFile();

概括

  • 回調很簡單,但可能會導致回調地獄。
  • Promises 清理回調地獄並提供更好的錯誤處理。
  • Async/Await 讓非同步程式碼看起來同步,提高可讀性。

選擇非同步與同步程式碼取決於您的用例。對於 I/O 密集型操作,始終偏好非同步模式,以保持主執行緒非阻塞和應用程式回應。

感謝您的閱讀,祝您編碼愉快! ?

以上是Node.js 中的非同步模式 - Node.js 教學 - 第 6 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn