等待令牌,然后再发出进一步的ajax请求

时间:2018-09-18 21:48:05

标签: javascript asynchronous axios

我正在使用包装API的类。它利用了Axios。为了向API发出请求,我需要一个JWT令牌,该令牌是使用api密钥通过另一个请求检索的:

async setAuthorizationHeader() {
    const res = await this.Axios.post('/login', {
        api_key: ''
    });

    this.AuthToken = res.data.token
    this.Axios.defaults.headers.common['Authorization'] = `Bearer ${res.data.token}`
}

一旦脚本被加载并且setAuthorizationHeader方法在构造函数中运行,实例化该类,因此它在开始时发出登录请求。我的问题是,如果我想在页面加载时运行另一个API调用,因为我们还没有获得令牌,所以我将收到401消息,所以我不能。

这是我班上的另一个方法,我也将在页面加载时运行该方法:

async getPromotions() {
    const response = await this.Axios({
        method: 'POST',
        url: '/promotions',
        data: {
            ...this.baseData,
        }
    })

    return response.data
}

在运行getPromotions请求之前,有什么方法可以等待授权步骤完成吗?

1 个答案:

答案 0 :(得分:0)

  1. 您可以存储有关令牌获取的 promise 作为API对象的一部分。
  2. 描述所有其他API调用,例如     API.tokenLoadingPromise.then(token => //使用axios进行呼叫

这样,您可以确保所有调用都仅在检索到令牌后才执行。