在 module.exports 中使用的函数中未定义

生物科学

所以,我正在尝试制作一个函数,在使用时会给出这样的预期结果

{
  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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章