Node異步編程

1.異步操作

  • Node 採用 Chrome V8 引擎處理 JavaScript 腳本,V8 最大特點就是單線程運行,一次只能運行一個任務。
    • Node 大量採用異步操作(asynchronous operation),即任務不是馬上執行,而是插在任務隊列的尾部,等到前面的任務運行完後再執行
    • 提高代碼的響應能力

2.什麼是異步

每一個任務有一個或多個回調函數(callback),前一個任務結束後,不是執行後一個任務,而是執行回調函數,後一個任務則是不等前一個任務結束就執行,所以程序的執行順序與任務的排列順序是不一致的、異步的。

這裏推薦阮一峯的Javascript異步編程的4種方法

由於系統永遠不知道用戶什麼時候會輸入內容,所以代碼不能永遠停在一個地方;
Node 中的操作方式就是以異步回調的方式解決無狀態的問題;


3.Node中回調函數的設計

對於一個函數如果需要定義回調函數:

  • 回調函數一定作爲參數的最後一個參數出現:
    • function foo1(name, age, callback) { }
    • function foo2(value, callback1, callback2) { }
  • 回調函數的第一個參數默認接收錯誤信息(錯誤優先的回調函數),第二個參數纔是真正的回調數據(便於外界獲取調用的錯誤情況):

注意:上面說到了一個錯誤優先的回調函數,因爲之後的操作大多數都是異步的方式,無法通過 try catch 捕獲異常


演示一個自己定義的錯誤優先的回調函數,判斷基數和偶數


/**
 * 異步的回調的方式獲取數據
 */
function isOddOrEvenAsync(number, callback) {
  if (number && typeof number === 'number') {
    if (number % 2) {
      callback(null, '奇數');
    } else {
      callback(null, '偶數');
    }
  } else {
    callback(new Error('你傳的不是合法參數'));
  }
}

isOddOrEvenAsync(19, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync(10, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync(0, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync('aa', function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章