2017-05-29 42 views
0

我有一個函數可能會返回一些對象或可能會返回一個自定義錯誤對象。我無法檢測錯誤對象類型。NodeJS/Javascript:如何檢測錯誤對象的返回值?

我試過constructor.match(/ Error/i)或試圖在原型的Object.keys上工作,但沒有任何工作。以下是代碼?

function x() { 
    try { 
     ... 
    } catch {e} { 
     let err = new Error('caught error') 
     return err 
    } 
    return someObject 
} 

//the following gives: TypeError: err.constructor.match is not a function 
if (x().constructor.match(/Error/i)) { 
    //log error 
} 
//do something 

任何想法如何檢測輸出錯誤類型?

+0

'JSON.stringify(X())。包含( '錯誤')'?? (); error(); error();}錯誤代碼錯誤代碼: –

+2

'x instanceof Error' – Sirko

+0

@JaydipJ:function x(){let err = new Error();返回錯誤} console.log(JSON.stringify(x())。includes('error')) - > given false – BabyGroot

回答

4

可以檢查返回的對象是一個instanceof錯誤如下

let y = x(); 
if(y instanceof Error) { 
    // returned object is error 
} else { 
//returned object is not error 
} 
+0

Works fine thanks – BabyGroot

+1

其他選項是'if(Error.prototype.isPrototypeOf(y))'或鴨子打字就像'if(y.stack!== undefined)' –

+0

@thanks Kiril Rogovoy - 這也可以工作,但解決方案中的一個更具可讀性 – BabyGroot

0

試試這個

All Error instances and instances of non-generic errors inherit from Error.prototype. As with all constructor functions, you can use the prototype of the constructor to add properties or methods to all instances created with that constructor. 

屬性

標準性能

Error.prototype.constructor 

指定創建一個實例的原型功能。

Error.prototype.message 

錯誤消息。

Error.prototype.name 

錯誤名稱。

try { 
    throw new Error('Whoops!'); 
} catch (e) { 
    console.log(e.name + ': ' + e.message); 
} 
+0

function x(){let err = new Error(「err」); return err} console.log(x()。prototype)< - 給出undefined 你的意思是? – BabyGroot

+0

檢查此https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error –