【问题标题】:Returned data of require function becomes undefined (Js, NodeJs, Discord.js) [duplicate]要求函数的返回数据变为未定义(Js,NodeJs,Discord.js)[重复]
【发布时间】: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()的结果顺序不对?

谢谢。

【问题讨论】:

    标签: javascript node.js fs discord.js


    【解决方案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,不知道这是一个需要回调的异步函数...没有明确说明。
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多