【发布时间】:2021-03-03 02:22:25
【问题描述】:
对于上下文,我正在使用 NextJs。
基本上从我的一个 api 页面 /api/sendData.ts,我正在做一个方法调用 process(),它属于一个单独的类 platform.ts。
API 代码结构(在 sendData.ts 中):
try {
platform.process(someParam);
} catch (err) {
console.log('caught error');
// do further handling here
}
platform.ts中process()的实现:
SomeLibrary.request( {content} )
.then( (response) => console.log(response) )
.catch( (err) => { console.log('throwing'); throw err; } );
目前,这不会抛出错误(或者至少我无法从调用者那里捕获),而是打印出“抛出”,然后是“UnhandledPromiseRejectionWarning:StatusCodeError:401 .....” .我也试过这个:
.catch( function(err) { throw err; } );
根据我的阅读,似乎在 catch 块中抛出错误实际上是“返回另一个承诺”,因此承诺链并没有真正解决(?)或完整。
如何在 catch 块中抛出错误,以便可以将此错误传播回 sendData.ts 进行处理?甚至可以将错误冒泡备份,以便我可以从服务器端处理错误(nextjs 中的./api)
附:该线程突出显示了我面临的完全相同的错误,并且没有一个响应能够解决我的问题:UnhandledPromiseRejectionWarning: This error originated either by throwing inside of an async function without a catch block
【问题讨论】:
-
代替
throw err;试试return Promise.reject(err); -
另外,你需要
await platform.process()或者你的外部 try catch 什么都不做。同样为了这个工作,你需要从platform.process()返回承诺
标签: node.js next.js es6-promise