我正在尝试使用JavaScript的fetch方法,但是它似乎不是异步的。
这是我的代码:
fetch(`${global.URL}${url}`, requestConfig)
.then(res => res.json())
.then(res => {
console.log('response', res);
return res;
})
.catch(error => {
console.log('error: ', error)
})
我大部分时间都会遇到以下错误,错误率约为70%,但有30%的情况下会收到有效的响应。当我保存文件并重新渲染时,它有时会正常工作。
error: SyntaxError: Unexpected token T in JSON at position 0
at parse (<anonymous>)
at tryCallOne (core.js:37)
at core.js:123
at JSTimers.js:277
at _callTimer (JSTimers.js:135)
at _callImmediatesPass (JSTimers.js:183)
at Object.callImmediates (JSTimers.js:446)
at MessageQueue.__callImmediates (MessageQueue.js:396)
at MessageQueue.js:144
at MessageQueue.__guard (MessageQueue.js:373)
我尝试在内部和async/await函数中调用它,但没有帮助。
编辑1:
这是我发出请求的方式。
const authenticityToken = global.TOKEN
const query = (url, config) => {
const requestConfig = {
credentials: 'same-origin',
...config,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: authenticityToken,
},
}
return fetch(`${global.URL}${url}`, requestConfig)
.then(res => res.json())
.then(res => {
console.log('response', res);
return res;
})
.catch(error => {
console.log('error: ', error)
})
// .then(handleResponseError)
}
export const get = (url, data) =>
query(data ? `${url}?${stringify(data)}` : url)
export function fetchUser() {
return (
get('/api/v3/me/')
)
}
然后我在组件中调用该函数,如下所示:
const fetchUserAction = () => {
fetchUser()
.then((response) => {
if(response) setUser(response.data)
})
}
useEffect(() => {
fetchUserAction()
}, [])
.then(res => { console.log({res}); return res.json()})
。 (注:该代码片段是JavaScript中Promise的语法,.then()
用于在Promise成功时执行特定操作,而console.log()
用于在控制台打印消息,res.json()
则将响应转换为JSON格式。) - Eric Hasselbring401
,这意味着它是“未经授权的”。因此,你将无法获得有效的响应。解决为什么会随机提供401并继续前进。 - Panther