php和nodeJs捕獲異常在回掉函數中的差別

php代碼:php

try{
    foo(2,function($param){
        if($param==1){
            throw new Exception('cathing');
        }
    });
}catch(Exception $e){
    echo $e->getMessage();
}
function f1($v) {
  return $v + $v;
}
function foo($n, $f='') {
  if($n < 1) return;
  for($i=0; $i<$n; $i++) {
    echo $f ? $f($i) : $i;
  }
}
//運行結果cathing

nodeJs代碼:node

const fs = require('fs');

try {
    fs.readFile('/some/file/that/does-not-exist', (err, data) => {
        // mistaken assumption: throwing here...
        if (err) {
            throw err;
        }
    });
} catch (err) {
    // 這裏不會截獲回調函數中的throw
    console.error(err);
}
//運行結果以下圖

圖片描述

結論:php在函數中能夠捕獲到異常,node不行。node能夠用如下方式捕獲,也就是錯誤信息優先的回調模式慣例。函數

const fs = require('fs');

function errorFirstCallback(err, data) {
  if (err) {
    console.error('There was an error', err);
    return;
  }
  console.log(data);
}

fs.readFile('/some/file/that/does-not-exist', errorFirstCallback);
相關文章
相關標籤/搜索