#javascript #function #axios #return #node-modules
#javascript #функция #axios #Возврат #узлы-модули
Вопрос:
Я программирую 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
}
Я поставил a console.log
перед оператором return, и он показал данные axios, но когда я регистрирую значение, которое функция возвращает в моем index.js
файле, оно есть undefined
.
Мой index.js
файл выглядит следующим образом:
const fns = require('./functions.js');
try {
const url = `https://api.tenor.com/v1/search?q=${searchTerm}amp;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
функции перед возвратом он показывает правильные данные, когда я их регистрирую.
Ответ №1:
Похоже, в вашем коде есть две проблемы. Во-первых, похоже, что вы забыли вернуть результат axios.get
. Попробуйте изменить свою axiosGet
функцию на следующую:
function axiosGet(url) {
return axios.get(url).then((response) => {
const { data } = response;
return data;
}).catch((err) => {
throw err;
});
}
Далее, поскольку axiosGet
возвращает a Promise
, вам нужно будет дождаться выполнения обещания, прежде чем вы сможете использовать результат. Если ваш второй блок кода находится внутри асинхронной функции, вы можете сделать следующее:
try {
const url = `https://api.tenor.com/v1/search?q=${searchTerm}amp;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}amp;key=${process.env.TENNOR_KEY}`;
fns.axiosGet(url).then(data => {
console.log(data);
}).error(err => {
console.log(err);
msg.reply('An Error Has Occured');
});