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

标签 javascript

我想在从另一个文件成功调用 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/

相关文章:

javascript - 量表的渐变填充 - Highcharts

javascript - 如何使用 jQuery 使列表元素内的图像可点击?

javascript - 如何使图表的网格与轴对齐

javascript - Angular js 选项卡应用程序

javascript - 用于匹配沙特阿拉伯 (KSA) 车辆编号模式的正则表达式

c# - 在 asp.net 中通过 javascript alert 显示异常信息

javascript - 使用 Ajax 将页面上的项目更新到数据库

javascript - 使用replace修改src attr

javascript - 如何做描边不透明度 :0 with d3

javascript - 将网址/路径插入谷歌地图标记,Laravel