在获取过程中捕获未处理的承诺拒绝警告



我有一个代码:

function () {
return new Promise((resolve, reject) => {
try {
fetch(URL, { method: METHOD, body: BODY })
.then((res) => res.json())
.then((json) => {
resolve(json);
})
.catch((res) => {
reject(res);
})
} catch (exception) {
reject(exception);
}
});
}

当服务器响应不使用 json 时,我有

未处理的承诺拒绝

警告:未处理的承诺拒绝。此错误起源于在没有 catch 块的异步函数内部抛出,或者拒绝未使用 .catch(( 处理的承诺。

我知道尝试捕获不会捕获异步抛出。

我读过

无法在承诺中捕获未处理的承诺拒绝警告,

尝试捕获无法捕获未处理的承诺拒绝警告,

"未处理的承诺拒绝警告"错误,即使存在捕获

但我的问题没有答案。

>Try catch将无法处理异步抛出的错误(即承诺(,您必须为此使用.catch()

JSfiddle

function someFunc() {
return new Promise((resolve, reject) => {
fetch(URL, {method: METHOD, body: BODY})
.then((res) => res.json())
.then((json) => {
resolve(json);
})
.catch((err) => {
reject(err);
})
});
}
someFunc()
.then((value)=>{})
.catch((err)=>{console.log(err)})

编辑: 当服务器响应时没有json但有错误,则返回的承诺是rejected。因此,您应该确保在函数调用(即someFunc().catch(()=>{})(上调用.catch()。如果未处理被拒绝的承诺(没有捕获(,则会出现此错误。

编辑2:哎呀。对不起,误读了你的问题,但我想解释保持不变。 如果res没有json()方法,则在调用res.json()时将引发以下错误:

Uncaught TypeError: res.json() is not a function

error将被您的.catch()块捕获。现在 catch 块将返回一个新的被拒绝的承诺。当调用函数并且没有catch()来处理请求时,将抛出您正在谈论的错误。

我在这里解释了更多。

Try/catch 仅适用于使用异步函数包装异步操作时的操作。

fetchSomething = async url => {
try {
await fetch(url)
} catch (error) {
// We will see error here
}
}

在此处查看捕获异步错误的其他方法:https://dev.to/sobiodarlington/better-error-handling-with-async-await-2e5m

相关内容

最新更新