2017-06-16 48 views
0

我正在使用nock.back來嘲笑一些API調用。當發生意外的呼叫時,UnhandledPromiseRejectionWarning會被打印到控制檯,但我的測試通過,並且在控制檯其他輸出中很容易忽略這些警告。我想拋出一個異常而不是無聲的錯誤。我該怎麼做呢?如何使節點爲UnhandledPromiseRejectionWarning拋出錯誤

回答

1

我使用的承諾的方式是:

function myFunction(){ 
    return new Promise((resolve, reject) -> { 
     try { 
      // Logic 
      resolve(logic) 
     } catch(e) { 
      reject('Provide your error message here -> ' + e) 
     } 
    }) 
} 

還是!

function myFunction().then(// Calls the function defined previously 
    logic => { // Instead of logic you can write any other suitable variable name for success 
     console.log('Success case')  
    }, 
    error => { 
     console.log('myFunction() returned an error: ' + error) 
    } 
) 

UPD

你吃過這裏看看嗎? https://nodejs.org/api/process.html#process_event_unhandledrejection 它描述了一個unhandledRejection事件,當你沒有捕獲Promise的拒絕並提供代碼來捕獲WARNING並將其很好地輸出到控制檯時,會發出unhandledRejection事件。

(複製粘貼)

process.on('unhandledRejection', (reason, p) => { 
    console.log('Unhandled Rejection at:', p, 'reason:', reason); 
    // application specific logging, throwing an error, or other logic here 
}); 

的Node.js運行在一個單一的過程。

+0

我知道這是最佳實踐,但我希望我的測試在未遵循最佳實踐時失敗。 –

+1

你看過這裏嗎? https://nodejs.org/api/process.html#process_event_unhandledrejection它描述了一個unhandledRejection事件,當你沒有收到Promise的拒絕並給你代碼基本上捕獲警告時發生。 – user4447655

+0

第一個代碼片段沒用,你不需要在Promise構造函數回調中使用'try' /'catch' – Bergi