JSON.stringify(security_check())正在运行一个具有axios.post的函数,它应该返回一个对象,我可以将其用作security_check()的return()。我遇到的问题是,当我调用security_check()时,我无法让函数等待axios完成并将axios响应用作我的函数响应
我尝试过return(axios),但是aucios在安全检查完成后会回来。
class AppLogin extends React.Component{
console.log("class before calling security_check()")
sessionStorage.setItem('profile', JSON.stringify(securitycheck()))
console.log("class after calling securitycheck()")
}
------------
//with return axios
function securitycheck() {
let profile = {}
const s_token = JSON.parse(sessionStorage.getItem('token'))
console.log("inside securitycheck, before axios")
return axios.post("http://localhost:3001/account/", s_token, {
headers: {
'Content-Type': 'application/json',
'Accept' : 'application/json'
}
})
.then(res => {
profile = res.data
console.log("inside .then")
return profile
}).catch(err => err);
}
----------
CONSOLE:
class before calling securitycheck()
SecurityCheck.js:7 inside securitycheck
AppLogin.js:45 class after calling securitycheck()
SecurityCheck.js:14 inside async
// with async/await
async function security_check() {
const s_token = JSON.parse(sessionStorage.getItem('token'))
console.log("inside securitycheck")
let res = await axios.post("http://localhost:3001/account/", s_token, {
headers: {
'Content-Type': 'application/json',
'Accept' : 'application/json'
}
})
console.log("inside async")
return res.data;
}
CONSOLE:
class before calling securitycheck()
SecurityCheck.js:7 inside securitycheck
AppLogin.js:45 class after calling securitycheck()
SecurityCheck.js:14 inside async
没有错误,只是没有正确的答案:)
答案 0 :(得分:0)
问题是您不是await
的security_check用户。
security_check
和securitycheck
返回的是承诺而不是结果。
使用async / then函数时,使用return
关键字时,结果实际上包装在Promise.resolve中。因此,看起来好像代码正在返回res.data
,但实际上是在返回对res.data的承诺
更改
sessionStorage.setItem('profile', JSON.stringify(security_check()))
收件人
sessionStorage.setItem('profile', JSON.stringify(await security_check()))
或者如果您使用then
语法
securitycheck().then(val => {
sessionStorage.setItem('profile', JSON.stringify(val))
console.log("class after calling securitycheck()")
})