首页 > 解决方案 > 如何等到函数返回值?

问题描述

我有一个反应课。

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返回一个值。我需要为此创建一个承诺吗?

标签: javascriptreactjs

解决方案


Javascript 承诺

传递给 new Promise 的函数称为执行器。当新的 Promise 被创建时,executor 会自动运行。它包含最终应该产生结果的生产代码。按照上面的类比:执行者是“歌手”。

它的参数 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();
        })
})

推荐阅读