Node.js系列基礎學習-----回調函數,異步

Node.js基礎學習 node

Node.js回調函數

Node.js異步編程的直接體現就是回調,異步編程依託回調來實現,但不是異步。回調函數在完成任務後就會被調用,Node有不少的回調函數,其全部的API都支持回調。 編程

Eg:能夠一邊讀取文件,一邊執行其它的命令,在文件讀取完成後,咱們將文件內容做爲回調函數的參數返回,這樣在執行代碼時就沒有阻塞或等待文件I/O操做。大大的提升了node.js的性能,處理大量的併發請求。(簡單的理解就是同時作兩件或者多件事情,減小其等待的時間) 併發

阻塞代碼: 異步

1:建立文本和js代碼。以下: 異步編程

  1. /*阻塞代碼示例*/
  2. var fs=require('fs'); //引入fs包,讀取文件
  3. var data=fs.readFileSync('ahui.txt');
  4. console.log(data.toString());
  5. console.log('程序結束');

執行結果: 函數

能夠發現阻塞代碼它是按照順序執行的,等待文件讀取完畢才執行打印操做。 性能

非阻塞代碼

建立文本和js,以下: 學習

  1. /*非阻塞代碼示例*/
  2. var fs=require('fs'); //引入js包
  3. fs.readFile('ahui.txt',function(error,data){
  4.    if(error) throw error;
  5.       console.log(data.toString());
  6. });
  7. console.log('程序執行結束');

這個是在讀取文件的同時打印輸出的。咱們不須要等待文件讀取完,這樣就能夠在讀取文件時同時執行接下來的代碼,大大提升了程序的性能。能夠這麼說,阻塞式按順序執行的,非阻塞是不須要按順序的,因此處理回調函數的參數,就能夠寫在回調函數內。 ui

代碼解析:進行I/O操做,給readFile綁定了一個回調函數function(error,data){},並在讀取完ahui.txt文件後執行回調函數,期間,後面的代碼繼續執行,不受I/O阻塞。spa

附件:

理解Node.js的異步非阻塞I/O模型:https://cnodejs.org/topic/4f50dd9798766f5a610b808a

相關文章
相關標籤/搜索