使用承诺减少 API 调用

时间:2021-02-22 16:16:16

标签: javascript promise

我有以下调用,它需要一个令牌并进行 API 调用并返回另一个令牌

export default (token, id) => {
  if (map[id]) {
    return Promise.resolve(map[id]?.token);
  }
  axios
    .post(
      `https://**********`,
      { id },
      {
        headers: {
          Authorization: `Bearer ${token}`
        }
      }
    )
    .then(response => {
      const { token } = response;
      map[id] = {
        ...response,
      };
      return token;
    });
};

第一次,我有 5-10 个 API 调用此方法,这些 API 会调用各个令牌 API,因为在第一时刻映射中没有设置任何内容。 因此,在设置映射之前进行单独的令牌调用。我想减少令牌 API 调用的次数,即让所有 API 调用等到第一个令牌 API 调用获得响应并将其设置在地图中。

1 个答案:

答案 0 :(得分:-1)

在 Map 中存储承诺:

 if(!map[id])
   map[id] = axios.post(/*...*/).then(/*...*/);
 return map[id];