gpt4 book ai didi

javascript - 如何从 `try` block React 中成功的 API 调用返回对象?

转载 作者:行者123 更新时间:2023-11-30 19:01:08 25 4
gpt4 key购买 nike

我想在从另一个文件成功调用 API 后返回一个对象。但每次调用成功,但返回的对象是未定义。让我把情况说清楚。

App.js

我从 App.js 调用 Auth.session(),它会返回一个 Session() 对象。

 try{
Auth.session(); #data123


console.log("data 123",Auth.session());

}catch (e) {
console.log(e);
}

Auth.js

export class Auth {

static session() {

if(token !=null){

return Session.getSession(); //DATA 456
//Here when return to App.js,is the outcome I want
}


if(refreshToken != null){
try{

await axiosAccessClient.post(url, body)
.then(function (response) {

//... do something else with the response.data

console.log(Session.getSession()); //here have the outcome I want
return Session.getSession(); // **DATA 678**
//but here when return to App.js,it become undefined
}).catch(function (error) {
throw error;
})
} catch (e) {
throw e
}

}else{
thorw "No session"
}
}
}

这是我的Session

export class Session {
constructor(access_token){
this.token= access_token;

}

static getSession(){
return new Session(
localStorage.getItem("access_token"),
)
}
}

所以我在 App.js 中,可以像这样获取 console.log :

Session{access_token: .......}  //Should return this in App.js 

我可以从 if(token!= null) (DATA 456) 部分得到上面的结果,但是在 try block 中API 调用 (DATA 678 PART) 它在 App.js 中返回 UNDEFINED

所以我的问题是,API调用成功后如何返回一个对象?我尽力解决这个问题,我们将不胜感激。

最佳答案

当您想使用async/await 时,不要使用then。在 if (refreshToken != null) block 中,您只是从 then 回调中returning,而不是从 Auth。 session 。使用

export class Auth {
static async session() {
if (token != null) {
return Session.getSession();
}
if (refreshToken != null) {
const response = await axiosAccessClient.post(url, body);
//... do something else with the response.data
return Session.getSession();
} else {
throw new Error("No session");
}
}
}

顺便说一下,don't make Auth a class if static session is the only method .

关于javascript - 如何从 `try` block React 中成功的 API 调用返回对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com