我有一个代码:
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:未处理的承诺拒绝 . 此错误源于通过抛出异步函数而没有catch块,或者拒绝未使用.catch()处理的promise .
我知道try-catch不会捕获异步抛出 .
我读过了
Cannot catch UnhandledPromiseRejectionWarning in promise,
Try Catch unable to catch UnhandledPromiseRejectionWarning,
“UnhandledPromiseRejectionWarning” error even when catch is present
但我的问题没有答案 .
1 回答
Try catch
将无法处理异步抛出的错误(即,在promise中),您必须使用.catch()
.JSfiddle
编辑:当服务器响应没有
json
但有错误时,您返回的承诺是rejected
. 因此,您应该确保在函数调用中调用.catch()
(即someFunc().catch(()=>{})
) . 如果未经处理的拒绝承诺(没有捕获),则会出现此错误 .Edit2:哎呀 . 对不起,误读了你的问题,但我想解释仍然相同 . 如果
res
没有json()
方法,则在调用res.json()
时会抛出以下错误::error
将被.catch()
块捕获 . Now catch block will return a new rejected promise. 当调用该函数并且没有catch()
来处理请求时,将抛出您正在讨论的错误 .我已经解释了更多here .