javascript - 出现错误时重新运行函数并传递结果

标签 javascript promise vuejs2

我已将 api 调用分为三层。 组件存储库apihelper。我希望 refresh_tokens 的逻辑位于 apihelper.js 中。当我这样做时,似乎 apihelper 在获取 401 响应状态后再次运行,但它从未将数据传递回 组件。我知道我可以将逻辑放在组件中重新运行它,但是当我添加更多调用时,似乎最终会出现大量重复代码。我觉得这可能是由于我对 javascript Promise 的理解浅薄造成的,但我是一个 javascript 初学者。

组件

<script>
import breweryrepository from '@/repository/breweryrepository.js'
export default {
    mounted() {
        this._getTotalBreweries();
    },
    methods: {
        _getTotalBreweries() {
            breweryrepository.getTotalBreweries()            
                .then((response) => {
                    if(response.data)
                    {
                        this.totalNumberOfBreweries = response.data.totalBreweries;
                    }
                })
        }
    },
    data () {
        return {
            totalNumberOfBreweries: ''
        }
    }
}
</script>

存储库

import apihelper from '@/helpers/ApiHelper.js';

export default {  

  getTotalBreweries() {
    return new Promise(function(resolve, reject) {
      resolve(apihelper.apiCall('/brewery/totalnumber'));
    });      
  }
} 

API助手

import axios from 'axios';
var querystring = require('querystring');
import { store } from '../store/store.js';
import auth from '@/auth/auth.js'

export default {       
  apiCall(url) {
    return axios.get(store.state.baseUrl + url, { 'headers': auth.getAuthHeader() })
      .catch((error) => {                    
        if(error.response.status == 401)
        {
          console.log("401 error, running refresh and apicall again");
          auth.refreshToken();
          this.apiCall(url);                          
        }
    })
  }
}  

最佳答案

啊啊啊我没有回电话。

return this.apiCall(url);

现在可以使用

关于javascript - 出现错误时重新运行函数并传递结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036813/

相关文章:

binding - 使用计算属性和 VueX 的样式绑定(bind)

javascript - Flask 中的 jQuery 自动完成功能

javascript - 只想在 fullcalendar 插件中显示星期和日期

javascript - 如何控制函数按顺序执行?

javascript - 如果一个属性具有特定值,则删除整个对象

javascript - 将异步工作流程更改为 Promise (Bluebird)

javascript - Promise拒绝 "... not defined",我如何找到来源

multithreading - 在独立 Perl 脚本中使用 Mojo::Promise

javascript - 是否可以创建一个通过数据绑定(bind)显示的变量实例?

javascript - 将组件注册到现有的 Vue.js 实例