如何等待函数返回值?

时间:2020-08-23 10:01:08

标签: javascript reactjs

我有一个反应班。

componentDidMount() {
  let refresh_token = localStorage.getItem('refresh_token');
  let isTokenActive = this.checkIfRefreshTokenWorking(refresh_token);
}

checkIfRefreshTokenWorking = (refresh_token) => {
  let trueOrFalse = false;
  fetch('http://localhost:8888/refresh_token?refresh_token='+refresh_token)
   .then(response => {
     response.json()
     trueOrFalse = true;
   })
   .catch(err => {
     trueOrFalse = false;
   })
   .finally(() => {      
     return trueOrFalse;
   })
}

isTokenActive未定义。我要等到checkIfRefreshTokenWorking返回一个值。我需要为此做出承诺吗?

2 个答案:

答案 0 :(得分:1)

Javascript承诺

传递给新Promise的函数称为执行程序。创建新的Promise后,执行程序将自动运行。它包含产生代码,最终应产生结果。按照上面的类比:执行者是“歌手”。

其参数resolve和reject是JavaScript本身提供的回调。我们的代码仅在执行程序内部。

这不是经过测试的代码

componentDidMount() {
        let refresh_token = localStorage.getItem('access_token');
        this.checkIfRefreshTokenWorking(refresh_token)
              .then((data) => console.log(data))
              .catch(error => console.log(error));
}

checkIfRefreshTokenWorking = (refresh_token) => new Promise((resolve, reject) => {
     let trueOrFalse = false;
        fetch('http://localhost:8888/refresh_token?refresh_token='+refresh_token)
        .then(response => {
          response.json()
          trueOrFalse = true;
          resolve(response.json());
        })
        .catch(err => {
          trueOrFalse = false;
          reject(err);
        })
        .finally(() => {      
            return trueOrFalse;
            resolve();
        })
})

答案 1 :(得分:0)

您在这里有两个选择

  1. 使用e7.selection_get()和刷新令牌调用
  2. 使用async/await方式
conditional rendering

参考:

相关问题