#javascript #node.js #discord.js
Вопрос:
Итак, я пытаюсь создать функцию, которая при использовании дает ожидаемый результат, подобный этому
{
id: 'ID_OF_THE_USER',
username: 'USERNAME_OF_THE_USER',
avatar: 'AVATAR_ID_OF_THE_USER',
discriminator: 'THE_TAG',
public_flags: SOME_NUMBER,
banner: null,
banner_color: 'A_HEXCODE',
accent_color: SOME_NUMBER
}
Однако я получаю правильный результат, когда использую функцию в своем main.js файл, но когда у меня есть функция в другом файле (например: function.js) и использовать module.exports в этом внешнем файле и использовать эту функцию в main.js файл, я получаю неопределенное значение.
Функция, о которой я говорю,:
const Discord = require('discord.js');
const client = new Discord.Client();
client.login('MyBotToken');
client.api.users('SomeUserID').get().then((result) => { return resu< });
Мой нынешний function.js файл:
const Discord = require('discord.js');
module.exports =
{
user: function(UserID)
{
const client = new Discord.Client();
client.login('MyBotToken');
client.api.users(UserID).get().then((result) => { return resu< });
}
}
Мой нынешний main.js файл:
const details = require('./function');
const userInfo = details.user('SomeUserID');
console.log(userInfo);
Теперь, когда я запускаю свой main.js файл, я получаю неопределенное значение.
Любая помощь будет оценена по достоинству !
Версия моего узла: 14.16 Моя Discord.js версия: 12.5.3
Комментарии:
1. В вашей экспортируемой функции нет
return
оператора.
Ответ №1:
У вас есть две проблемы. Во-первых, ваша функция user()
не имеет оператора return и, следовательно, вообще не возвращает никакого значения. return result
Это относится не к области действия user()
, а только к анонимной функции, переданной .then()
. Тогда .then((result) => { return resu< })
в вашем примере целое выражение вообще не имеет никакого эффекта, так как любое возвращаемое значение из переданной функции .then()
обещания само автоматически будет заключено в обещание.
Вторая проблема заключается в том, что ваш код main.js
не ожидает обещания. Чтобы «получить» значение из обещания, возвращенного из API Discord, вы должны либо использовать await
его в контексте, где это возможно (внутри async
функции или на верхнем уровне модуля ES), либо с помощью .then()
назначить функцию для обработки результата, когда обещание будет выполнено. Вы не можете вернуть значение в «несинхронную» область.
Что вы могли бы сделать, чтобы смягчить эти проблемы, так это переписать function.js
на
const Discord = require('discord.js');
module.exports = {
user: function(UserID) {
const client = new Discord.Client();
client.login('MyBotToken');
return client.api.users(UserID).get();
}
}
и main.js
чтобы
const details = require('./function');
details
.user('SomeUserID')
.then((userInfo) => { console.log(userInfo); });
Если бы вы вместо этого вызывали свою user()
функцию внутри async
функции, вы могли бы просто сделать
const details = require('./function');
const userInfo = await details.user('SomeUserID');
console.log(userInfo);
Комментарии:
1. эй, @Mikael, я использовал это на своем main.js « const details = требуется(‘./функция’); const userInfo = ожидает сведений.пользователь(‘идентификатор пользователя’); console.log(userInfo); ` » но я получил ошибку, указывающую на синтаксическую ошибку: ожидание допустимо только в асинхронной функции, пожалуйста, помогите 🙂
2. эй, @Mikael ! на самом деле, nvm я нашел ответ на свою проблему > Вы не можете вернуть значение в «несинхронную» область.