gpt4 book ai didi

javascript - 将错误抛出到 catch 处理程序并忽略 then 函数?

转载 作者:行者123 更新时间:2023-12-03 00:43:40 27 4
gpt4 key购买 nike

我有一个辅助函数:

function httpRequestHelper(body) {
return fetch(`${host}:${port}`, {
method: 'post',
body: JSON.stringify(body)
})
.then(function (response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(response) {
if (response.type === 'error') {
throw Error(response);
}
return response;
})
.catch(function(error) {
return error;
});
}

我编写的目的是为了保持各种命令的函数简短。这些函数只是指定要发送的正文以及响应的哪一部分与消费者相关:

function hasActiveProject() {
return httpRequestHelper({ type: 'request', cmd: 'has_active_project' })
.then(function (response) {
return response.payload.value;
})
}

我执行这样的各种命令:

try {
let hasActiveProjectResponse = await otii.hasActiveProject()
console.log(hasActiveProjectResponse);
} catch (error) {
console.log(error);
}

现在的问题是,在 catch 函数中,我希望抛出错误消息,但我却收到如下错误消息:

TypeError: Cannot read property 'value' of undefined

这是因为即使出现错误,hasActiveProject() 也会尝试提取相关响应,这会导致返回到我的 catch(错误)处理程序的不同错误。

我怎样才能重写这个,以便

  • hasActiveProject() 仍然很薄
  • catch 处理程序接收原始错误

最佳答案

您确定有错误吗?并且 response.payload 不是未定义的?因为在这个测试 fiddle 中,您可以看到它按照您想要的方式工作, try catch .then 函数内抛出的错误,并且不会继续。

https://jsfiddle.net/8qe1sxg4/6/

看起来response.type是有效的,所以你没有抛出任何错误,你能确认你得到的结果吗?

更新

经过更多研究,catch 函数不会冒泡到下一个 catch,它认为您已经处理了错误并照常继续(使用 catch 中的解析值)。但是你可以简单地在 .catch() 中再次拒绝,这样你的错误就会冒泡到 try/catch:

httpRequestHelper()中:

.catch(function(error) {
return Promise.reject(error)
//return error;
});

这会将您的错误发送到下一个捕获,例如参见 fiddle : https://jsfiddle.net/dcuo46qk/3/

关于javascript - 将错误抛出到 catch 处理程序并忽略 then 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53338271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com