我有以下代码:
export function fetchValueFromApi(){
return function act(dispatch){
dispatch(fetchingLimit);
return fetch('https://someapi/v1/foo/bar?api_key=123456789')
.then(response =>{
console.log("response",response.json());
response.json();
}).then(json =>{
if (json.data()) {
dispatch(receivingValue(json.data.result))
} else {
throw new Error('Error');
}
}).catch(error => dispatch(receivingValueFailed(error)))
}
}
现在我知道这个电话不会成功。我期待它失败并陷入困境。但是,我收到此错误:
可能未处理的承诺拒绝
所以出于某种原因,我们没有点击.catch
.
我怎么能解决这个问题?
因此,您遇到了问题,只是没有出现您预期的错误。
就 fetch 而言,403 不是错误,因为请求本身已成功发出(响应不是您的应用程序所期望的)。您必须自己处理 40X 错误。正如您的 console.log 显示的那样,异常发生在您throw new Error
到达之前。
当遇到网络错误或 CORS 在服务器端配置错误时, fetch() 承诺将拒绝并返回 TypeError,尽管这通常意味着权限问题或类似问题——例如,404 不构成网络错误。
来自https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
你应该
response.json()
在第一个 .then 处理程序中返回:.then(response => response.ok && response.json())
if (json && json.data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句