要求函数的返回数据变为未定义(Js,NodeJs,Discord.js)[重复]

Posted

技术标签:

【中文标题】要求函数的返回数据变为未定义(Js,NodeJs,Discord.js)[重复]【英文标题】:Returned data of require function becomes undefined (Js, NodeJs, Discord.js) [duplicate] 【发布时间】:2018-06-12 13:27:10 【问题描述】:

在同一个文件夹中,我有 3 个不同的文件,内容如下: • index.js

const getToken = require('./getToken.js');
console.log(getToken.getToken());

• getToken.js

const FS = require('fs'); //a library to read files    
module.exports = 
    getToken: function ()
        FS.readFile('./token.txt', 'utf8', function (err, data) 
            if (err) 
                console.error(err);
             else 
                console.log('Token is : ' + data);
                return data;
            
        );
    

• 令牌.txt

foo

我正在使用 NodeJs、fs、一个用于读取文件的库和一个 Discord 库。 我得到了输出:

undefined //result of index.js
Token is : foo //result of getToken.js

代码工作正常,只是令牌没有正确地提供给主 js 文件 (index.js),即使它被正确读取。 这段代码有什么问题?为什么console.log()的结果顺序不对?

谢谢。

【问题讨论】:

【参考方案1】:

欢迎来到异步世界。异步操作后返回值时需要使用回调或承诺(fs.readFile 是异步的);

使用回调是这样的:

module.exports = 
    getToken: function (callback)
        FS.readFile('./token.txt', 'utf8', function (err, data) 
            if (err) 
                callback(err);
             else 
                console.log('Token is : ' + data);
                callback(null, data);
            
        );
    



//Other file
const getToken = require('./getToken.js');

getToken.getToken(function(err, result)
  if(err) return console.log(err);
  console.log(result);
);

【讨论】:

Tahnks,不知道这是一个需要回调的异步函数...没有明确说明。

以上是关于要求函数的返回数据变为未定义(Js,NodeJs,Discord.js)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

nodejs中的自定义mysql函数返回未定义

Nodejs API调用将未定义返回给lambda函数

NodeJS(服务器):ReferenceError:当类型:模块时未定义要求

Nodejs:catch块中的回调函数在try-catch中返回未定义的参数

Vue.js 变量变为未定义

AngularJS、nodeJS、ReferenceError:未定义要求