Node.js 回調函數(阻塞與非阻塞)

来源:https://www.cnblogs.com/chenyingying0/archive/2020/03/09/12447434.html
-Advertisement-
Play Games

Node.js 非同步編程的直接體現就是回調。 回調函數在完成任務後就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支持回調函數。 例如,我們可以一邊讀取文件,一邊執行其他命令,在文件讀取完成後,我們將文件內容作為回調函數的參數返回。 這樣在執行代碼時就沒有阻塞或等待文件 I/O ...


Node.js 非同步編程的直接體現就是回調。

回調函數在完成任務後就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支持回調函數。

例如,我們可以一邊讀取文件,一邊執行其他命令,在文件讀取完成後,我們將文件內容作為回調函數的參數返回。

這樣在執行代碼時就沒有阻塞或等待文件 I/O 操作。這就大大提高了 Node.js 的性能,可以處理大量的併發請求。

回調函數一般作為函數的最後一個參數出現:

function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

 

阻塞代碼實例:

創建input.txt

這是cyy,正在學習node.js

創建main.js

var fs=require("fs");

var data=fs.readFileSync("input.txt");

console.log(data.toString());
console.log("文件讀取完畢~");

node main.js

 

 

fs模塊用於對系統文件及目錄進行讀寫操作。

使用require('fs')載入fs模塊,模塊中所有方法都有同步和非同步兩種形式。

這裡演示的是同步效果

 

非阻塞代碼

修改main.js

var fs=require("fs");

fs.readFile("input.txt",function(err,data){
    if(err){
        return console.error(err);
    }else{
        console.log(data.toString());
    }
});

console.log("文件讀取完畢~");

 

 

以上展示了阻塞與非阻塞調用的不同。

第一個實例在文件讀取完後才執行程式。

第二個實例我們不需要等待文件讀取完,這樣就可以在讀取文件時同時執行接下來的代碼,大大提高了程式的性能。

因此,阻塞是按順序執行的,而非阻塞是不需要按順序的,所以如果需要處理回調函數的參數,就需要寫在回調函數內。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 努力的一天又開始了,編輯這一篇文章,寫下當初我自學web前端走的彎路,希望大家引以為戒,不要多走前人走過的彎路,浪費時間。 彎路一:盲目的去學當初我在對於web前端這個行業什麼都不瞭解的情況下,比如:不知道未來發展趨勢,不知道學習web前端應該註意哪些初始問題,不知道具體的學習規劃學習路線等等,一味 ...
  • 寬度自適應: 預設寬度100%的元素 width:;單位為% 最小寬度自適應: min-width:; 最大寬度自適應: max-width:; 高度自適應: 不寫height,讓內容撐起 height:50%; 前提==>html,body{height:100%;} 最小高度自適應: min-h ...
  • 理解 隨著前端業務的發展, 我們一般在寫一個較為大型的 項目時候,會使用到 ,來根據指定的 或者 來進行內容的分發,可以達到不像服務端發送請求,就完成頁面內容的切換,能夠減少像伺服器發送的請求,讓用戶進行頁面跳轉時候能夠更快,體驗更好 疑問 在初學 的時候,一般人都會有一個印象, 以及 都是 原生自 ...
  • Vue 項目開發過程中,經常用到插件,比如原生插件 `vue-router`、`vuex`,還有 `element-ui` 提供的 `notify`、`message` 等等。這些插件讓我們的開發變得更簡單更高效。那麼 Vue 插件是怎麼開發的呢?如何自己開發一個 Vue 插件然後打包發佈到npm? ...
  • JavaScript 語言自身只有字元串數據類型,沒有二進位數據類型。 但在處理像TCP流或文件流時,必須使用到二進位數據。 因此在 Node.js中,定義了一個 Buffer 類,該類用來創建一個專門存放二進位數據的緩存區。 在v6.0之前創建Buffer對象直接使用new Buffer()構造函 ...
  • events 模塊只提供了一個對象: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。 你可以通過require("events");來訪問該模塊。 //引入events模塊 var events=require("events"); // ...
  • 2020還能轉行學web前端開發嗎?這是很多人在網路上搜索的問題。及其原因,還是因為目前網路上充斥著前端飽和的說法,這讓不少人懷疑還能不能轉行web前端,目前程式員行業前景很好,而web前端的前景也不差。 不否認初級前端程式員供給泛濫,待遇惡化,發展遇冷。但是當你堅持到中高級web前端工程師時,就會 ...
  • Node.js 是單進程單線程應用程式,但是因為 V8 引擎提供的非同步執行回調介面,通過這些介面可以處理大量的併發,所以性能非常高。 Node.js 幾乎每一個 API 都是支持回調函數的。 Node.js 單線程類似進入一個while(true)的事件迴圈,直到沒有事件觀察者退出,每個非同步事件都生 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...