从 Axios API 返回数据

2022-08-30 05:33:55

我正在尝试使用 Node.JS 应用程序来发出和接收 API 请求。它使用Axios向另一台服务器发送get请求,其中包含从它收到的API调用接收的数据。第二个代码段是脚本从回调返回数据的时间。它实际上会获取它并写入控制台,但它不会在第二个API中将其发送回去。

function axiosTest() {
    axios.get(url)
        .then(function (response) {
            console.log(response.data);
            // I need this data here ^^
            return response.data;
        })
        .catch(function (error) {
            console.log(error);
        });
}

...

axiosTestResult = axiosTest(); 
response.json({message: "Request received!", data: axiosTestResult});

我知道这是错误的,我只是试图找到一种方法来使它工作。我似乎可以从中获取数据的唯一方法是通过控制台.log,这在我的情况下没有帮助。


答案 1

问题是原始函数没有返回 promise。为清楚起见,以下是扩展说明:axiosTest()

function axiosTest() {
    // create a promise for the axios request
    const promise = axios.get(url)

    // using .then, create a new promise which extracts the data
    const dataPromise = promise.then((response) => response.data)

    // return it
    return dataPromise
}

// now we can use that data from the outside!
axiosTest()
    .then(data => {
        response.json({ message: 'Request received!', data })
    })
    .catch(err => console.log(err))

该函数可以更简洁地编写:

function axiosTest() {
    return axios.get(url).then(response => response.data)
}

或者使用异步/等待:

async function axiosTest() {
    const response = await axios.get(url)
    return response.data
}

答案 2

我知道这篇文章很旧。但是我已经看到过几次尝试使用异步和等待来回答,但弄错了。这应该清除它的任何新引用

最后更新:2022年5月这个答案仍然有很多兴趣,并已将其更新为使用箭头函数

const axiosTest = async () {
      try {
        const {data:response} = await axios.get(url) //use data destructuring to get data from the promise object
        return response
      }
        
      catch (error) {
        console.log(error);
      }
    }