Javascript 如何使用Axios和Typescript等待响应?

Javascript 如何使用Axios和Typescript等待响应?,javascript,node.js,typescript,asynchronous,axios,Javascript,Node.js,Typescript,Asynchronous,Axios,我需要您的帮助来调整我的方法,以等待axios响应。基本上,我向Web服务发送一个请求,需要等待响应以捕获返回并调用另一个方法 我曾尝试在我的通话中使用async/Wait,但我可能用错了 class PlaylistController { // Metodo inicial para criacao da playlist public async create(req: Request, res: Response): Promise<Response> { l

我需要您的帮助来调整我的方法,以等待axios响应。基本上,我向Web服务发送一个请求,需要等待响应以捕获返回并调用另一个方法

我曾尝试在我的通话中使用async/Wait,但我可能用错了

class PlaylistController {
  // Metodo inicial para criacao da playlist
  public async create(req: Request, res: Response): Promise<Response> {
    let artists = req.body.bands;
    artists = artists.split(',');

    const search = await Object.values(artists)
      .map((artistsName): Promise<AxiosResponse> => this.searchArtists(artistsName));
    console.log(search);

  }

  private searchArtists = async (artistName): Promise<AxiosResponse> => axios.get(`${API_URL}/search`, {
    params: {
      q: artistName,
      type: 'artist',
    },
    headers: {
      Authorization: `${TOKEN_TYPE} ${REFRESH_TOKEN}`,
    },
  }).then((response): AxiosResponse => { console.log(response.data.artists); return response; })
    .catch((error) => { console.log(error.response.data); return error; });
}
之后显示axios响应。

您的“创建”函数没有返回承诺,它是一个无效的返回类型函数。 此外,您还需要添加wait-before异步任务,如“Axios”。Object.values不是异步任务

class PlaylistController {
    // Metodo inicial para criacao da playlist
    public create(req: Request, res: Response): void {
      let artists = req.body.bands;
      artists = artists.split(',');

      search = Object.values(artists).map((artistsName): any => this.searchArtists(artistsName));
      console.log(search)
    }

    private searchArtists = async (artistName): Promise<AxiosResponse> => {
        return await axios.get(`${API_URL}/search`, {
            params: {
              q: artistName,
              type: 'artist',
            },
            headers: {
              Authorization: `${TOKEN_TYPE} ${REFRESH_TOKEN}`,
            }
        })
    }
}
类播放控制器{
//Metodo INIACIAL para criacao da播放列表
公共创建(请求:请求,响应:响应):无效{
let artists=所需的body.bands;
艺术家=艺术家。拆分(',');
search=Object.values(artistsName):map((artistsName):any=>this.searchArtists(artistsName));
console.log(搜索)
}
private searchArtists=async(artistName):Promise=>{
返回wait wait axios.get(`${API\u URL}/search`{
参数:{
问:艺人姓名,
类型:'艺术家',
},
标题:{
授权:`${TOKEN\u TYPE}${REFRESH\u TOKEN}`,
}
})
}
}

您的第一个
等待
只是等待
映射
函数的结果,该函数是同步的,并立即返回。如果要等待所有承诺返回,请使用
Promise.all
。可能重复我尝试了此操作,但出现错误,因为get()返回字符串| Promise,并且它与函数的返回类型不匹配
class PlaylistController {
    // Metodo inicial para criacao da playlist
    public create(req: Request, res: Response): void {
      let artists = req.body.bands;
      artists = artists.split(',');

      search = Object.values(artists).map((artistsName): any => this.searchArtists(artistsName));
      console.log(search)
    }

    private searchArtists = async (artistName): Promise<AxiosResponse> => {
        return await axios.get(`${API_URL}/search`, {
            params: {
              q: artistName,
              type: 'artist',
            },
            headers: {
              Authorization: `${TOKEN_TYPE} ${REFRESH_TOKEN}`,
            }
        })
    }
}