繁体   English   中英

值在 return 语句之前是正确的,但在代码的其他部分未定义

[英]value is correct before return statement, but undefined in other parts of the code

我正在编写一个 Discord 机器人,其中包含许多调用 API 的函数,因此我在我的项目中添加了一个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 数据,但是当我记录 function 在我的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 function 中返回之前它在我记录它时显示了正确的数据。

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

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

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

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');
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM