首页 > 解决方案 > Javascript/API - 调用异步函数导出 axios 请求的最佳方式

问题描述

这里的想法是调用一个 API 来获取组织中的运动价格。

我正在寻找一种像这样调用它的方法,但 const CHOOSE_SPORT 似乎不是异步的。这是一种更恰当地称呼它的方法吗?

export const url = '/api/sport/' 
    
    export const requestApi = async (sport) => {
      return await axios.get(url + sport).then(function(req) {
        console.log(req.data);
        return req.data;
      })
    };
    
     const CHOOSE_SPORT = freeze({ 
      [SPORT.NOW]: await requestApi('football'), 
      [SPORT.TOMORROW]: await requestApi('basketball') ,  
    });
    
    export const prize = (SPORT) => {
      return CHOOSE_SPORT[SPORT] ;
    }

标签: javascriptapiaxios

解决方案


我不确定这是否是你想要做的,但 requestApi 是一个异步函数,因此它会返回一个承诺。您不能在异步函数之外等待,您必须将其包装或使用。

export const url = '/api/sport/'

export const requestApi = async (sport) => {
  return await axios.get(url + sport).then(function (req) {
    console.log(req.data);
    return req.data;
  })
};

async function generateSportLib(SPORT) {
  const now = await requestApi('football');
  const tomorrow = await requestApi('basketball');
  const CHOOSE_SPORT = freeze({
    [SPORT.NOW]: now,
    [SPORT.TOMORROW]: tomorrow,
  });
  return CHOOSE_SPORT;
}

export const prize = async (SPORT) => {
  const CHOOSE_SPORT = await generateSportLib(SPORT);
  return CHOOSE_SPORT; // 
}


推荐阅读