gpt4 book ai didi

javascript - 在提取期间捕获 UnhandledPromiseRejectionWarning

转载 作者:行者123 更新时间:2023-11-29 18:51:46 25 4
gpt4 key购买 nike

我有一个代码:

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 时

UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().

我知道 try-catch 不会捕获异步抛出。

我读过

Cannot catch UnhandledPromiseRejectionWarning in promise ,

Try Catch unable to catch UnhandledPromiseRejectionWarning ,

“UnhandledPromiseRejectionWarning” error even when catch is present

但是我的问题没有答案。

最佳答案

Try catch 将无法处理异步抛出的错误(即在 promise 中),您必须为此使用 .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 但有错误时,您返回的 promise 是 rejected。因此,您应该确保在函数调用时调用 .catch()(即 someFunc().catch(()=>{}))。如果未处理您拒绝的 promise (没有捕获),则会出现此错误。

Edit2:糟糕。抱歉,误读了您的问题,但我想解释仍然相同。如果 res 上没有 json() 方法,当您调用 res.json() 时会抛出以下错误::

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

错误 将被您的.catch() block 捕获。 现在 catch block 将返回一个新的被拒绝的 promise 。当函数被调用时,如果没有 catch() 来处理请求,你所说的错误将被抛出。

我已经解释了更多here .

关于javascript - 在提取期间捕获 UnhandledPromiseRejectionWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059729/

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