所以,我正在尝试制作一个函数,在使用时会给出这样的预期结果
{
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 result; });
我当前的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 result; });
}
}
我当前的main.js文件:
const details = require('./function');
const userInfo = details.user('SomeUserID');
console.log(userInfo);
现在,当我运行main.js文件时,我得到undefined。任何帮助将不胜感激 !
我的节点版本:14.16 我的 Discord.js 版本:12.5.3
你有两个问题。第一个是您的函数user()
没有 return 语句,因此根本不返回任何值。该return result
不适的范围user()
,而只是匿名函数传递给.then()
。然后整个表达式.then((result) => { return result; })
在您的示例中根本没有任何影响,因为任何从传递给.then()
承诺的函数的返回值本身都会自动包装在承诺中。
第二个问题是您的代码main.js
不期望承诺。要从 Discord API 返回的 promise 中“获取”值,您必须在可能await
的上下文中使用(在async
函数内部或在 ES 模块的顶层)或使用.then()
do assign 函数来处理承诺解决时的结果。您无法将值返回到“非异步”范围。
您可以减轻这些问题的方法是重写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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句