Redux 文档建议每个 AJAX 请求有 3 个不同的操作。例如,对于登录,它们将是:
LOGIN_REUQEST
LOGIN_FAILURE
LOGIN_SUCCESS
但是我无法捕获所有可能引发的错误fetch
。在 redux 文档中,我找到了这个例子:
return fetch(`https://www.reddit.com/r/${subreddit}.json`)
.then(
response => response.json(),
// Do not use catch, because that will also catch
// any errors in the dispatch and resulting render,
// causing an loop of 'Unexpected batch number' errors.
// https://github.com/facebook/react/issues/6895
error => console.log('An error occured.', error)
)
.then(json =>
// We can dispatch many times!
// Here, we update the app state with the results of the API call.
dispatch(receivePosts(subreddit, json))
)
}
但我发现其中有几个问题:
- 它不使用catch,所以它不会在用户端捕获任何AJAX请求问题(例如没有互联网)
- 它不处理状态为 != 200 的响应。
我结束了这段代码,但它仍然无法处理案例 #1(因为 React 问题 - 请参阅上面代码中的注释):
fetch('/api/auth/signin', {...}),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json, text/plain, */*',
}
})
.then ( response =>
response.json().then(json => {
if (response.ok) {
dispatch(loginSuccess(json))
} else {
dispatch(loginFailure(json.errMsg))
}
})
)
您能否给我任何使用 fetch 处理 AJAX 请求的所有可能错误的示例。许多教程和开源项目只是忽略它。