首頁  >  文章  >  web前端  >  淺談Nodejs中的callback回調

淺談Nodejs中的callback回調

青灯夜游
青灯夜游轉載
2021-05-19 09:47:252556瀏覽

本篇文章跟大家介紹一下Nodejs中的callback回呼。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

淺談Nodejs中的callback回調

推薦學習:《nodejs 教學

什麼是callback?  很顯然,字面上就是回調

那為什麼在Node需要回呼操作呢?了解Node的同學可能會知道,就是為處理非同步操作的結果。

下面就是針對這個問題來詳細說一下:

在說非同步操作的callback回呼之前,我們先看一下同步的操作模式:

function processData () {
  var data = fetchData ();
  data += 1;
  return data;
}

這種同步模式一般情況下可以正常運作,在其他開發環境下這種操作也是很典型的。然後可以明顯的看到fectData方法如果在載入資料的時候很耗時,就會造成在資料同步載入完成之前整個程式阻塞的情況。

Node.js是一個非同步的操作處理的平台,其使用callback回呼的形式將不會被類似於檔案I/O操作等阻塞。一個回調函數就是在一個給定的任務執行完成之後執行的函數;這種方式可以避免一些阻塞的情況,同時允許其他的程式碼繼續執行。

我們使用Node.js的回呼的形式去處理上面的同步操作fetchData耗時的情況:

function processData (callback) {
  fetchData(function (err, data) {
    if (err) {
      console.log("An error has occurred. Abort everything!");
      return callback(err);
    }
    data += 1;
    callback(data);
  });
}

一開始看的話,確實會覺得有些複雜,不太容易理解,但確實很重要,因為回調處理非同步操作是Node.js的基礎。

callback回呼的意思是:你的非同步操作完成之後,你就執行我的callback回呼裡面的內容。

Node.js這種回調處理非同步操作的形式允許我們盡可能多的處理並發操作(操作類似於IO操作)

舉個例子:

在在一個web服務上,前面有幾個請求,由於某種原因阻塞了,同時之後還會有成百上千的請求正在發出;

Node.js會如何處理這種非同步阻塞的情況呢?

其會執行非同步的執行阻塞查詢,使之後的查詢請求可以正常運作,而不是說等待前面的阻塞請求結束之後,才去處理之後的請求。

下面是使用非同步函數的典型格式:

function asyncOperation ( a, b, c, callback ) {
  // ... lots of hard work ...
  if ( /* an error occurs */ ) {
    return callback(new Error("An error has occurred"));
  }
  // ... more work ...
  callback(null, d, e, f);
}

asyncOperation ( params.., function ( err, returnValues.. ) {
  //This code gets run after the async operation gets run
});

callback一般是非同步函數的做後一個參數,當非同步運算結束之後,去呼叫這個callback

一般情況下,callback的第一個參數是error

如果非同步操作遇到了錯誤,就會去呼叫 callback,第一個參數是一個Error物件;反之,第一個errornull,其他參數正常回傳。

英文原文網址:https://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/

更多程式設計相關知識,請造訪:程式設計影片! !

以上是淺談Nodejs中的callback回調的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除