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);