【问题标题】:value is correct before return statement, but undefined in other parts of the code值在 return 语句之前是正确的,但在代码的其他部分未定义
【发布时间】:2020-12-23 18:53:53
【问题描述】:

我正在编写一个包含许多调用 API 的函数的 Discord 机器人,因此我在我的项目中添加了一个 functions.js 文件,其中包含我似乎经常使用的不同函数,例如从 API 调用中获取数据。

在我的functions.js 文件中,我有这样的代码:

const axios = require('axios');

function randomEl(arr) {
    const index = Math.floor(Math.random() * arr.length);
    return arr[index];
}

function axiosGet(url) {
    axios.get(url).then((response) => {
        const { data } = response;
        return data;
    }).catch((err) => {
        throw err;
    });
}

module.exports = {
    randomEl,
    axiosGet
}

我在 return 语句之前放了一个 console.log,它显示了 axios 数据,但是当我记录函数在我的 index.js 文件中返回的值时,它是 undefined

我的index.js 文件如下所示:

const fns = require('./functions.js');

try {
    const url = `https://api.tenor.com/v1/search?q=${searchTerm}&key=${process.env.TENNOR_KEY}`;
    const data = fns.axiosGet(url);
    console.log(data);
} catch (err) {
    console.log(err);
    msg.reply('An Error Has Occured');
}

这部分代码中的数据是undefined,但在返回之前的实际axiosGet函数中,当我记录它时,它会显示正确的数据。

【问题讨论】:

    标签: javascript function axios return node-modules


    【解决方案1】:

    您的代码中似乎存在两个问题。首先,您似乎忘记返回axios.get 的结果。尝试将您的 axiosGet 函数更改为以下内容:

    function axiosGet(url) {
        return axios.get(url).then((response) => {
            const { data } = response;
            return data;
        }).catch((err) => {
            throw err;
        });
    }
    

    接下来,由于axiosGet 返回Promise,因此您需要等待promise 完成后才能使用结果。如果您的第二个代码块位于异步函数中,您可以执行以下操作:

    try {
        const url = `https://api.tenor.com/v1/search?q=${searchTerm}&key=${process.env.TENNOR_KEY}`;
        const data = await fns.axiosGet(url);
        console.log(data);
    } catch (err) {
        console.log(err);
        msg.reply('An Error Has Occured');
    }
    

    否则,您可以将其更新为使用Promise.then 方法:

    const url = `https://api.tenor.com/v1/search?q=${searchTerm}&key=${process.env.TENNOR_KEY}`;
    fns.axiosGet(url).then(data => {
        console.log(data);
    }).error(err => {
        console.log(err);
        msg.reply('An Error Has Occured');
    });
    

    【讨论】:

      猜你喜欢
      • 2020-05-09
      • 2012-05-07
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多