我目前正在研究如何从随后捕获的块中抛出异常。我想进入到捕集器里面 errorHandler()
功能。
const errorHandler = function () {
try {
thisFunctionReturnsAnError().then(response => {
console.log(response);
});
} catch (e) {
console.log(e); //How to trigger this?
}
};
const thisFunctionReturnsAnError = function () {
return3()
.then(value => {
throw new Error('This is the error message.');
})
.catch(err => {
//return Promise.reject('this will get rejected');
throw err;
//this one should somehow got to the catch that is located in the errorHandler() function. How to do this?
//I know that this 'err' will be in the next catch block that is written here. This is not what i want.
});
};
const return3 = async function () {
return 3;
};
errorHandler();
我在stackoverflow上搜索了一会儿,但没有任何帮助。我相信这个问题经常被问到,但我找不到答案,对此我深表歉意。
编辑:在这里添加了另一个版本的代码,但仍然不起作用
const errorHandler = async function () {
try {
thisFunctionReturnsAnError()
.then(response => console.log(response))
.catch(err => console.log(err));
} catch (e) {
//console.log(e); //How to trigger this?
}
};
const thisFunctionReturnsAnError = function () {
return3()
.then(value => {
throw new Error('This is the error message.');
})
.catch(err => {
return Promise.reject(`Message is: ${err}`);
});
};
const return3 = async function () {
return 3;
};
errorHandler();
我将得到以下错误消息:uncaught(in promise)消息是:error:这是错误消息。
2条答案
按热度按时间np8igboo1#
无法执行代码,因为“thisfunctionreturnsanerror”未返回承诺。这意味着您不能对返回值调用“then”。
为什么不总是用承诺呢?
avwztpqn2#
您无法使用synchronous处理承诺拒绝
try
/catch
. 不要用它,用承诺.catch()
你喜欢什么样的方法thisFunctionReturnsAnError
功能。您可以用以下方式处理拒绝承诺:
try
/catch
使用时async
/await
语法(在return3
):