Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回值时未定义_Javascript_Node.js - Fatal编程技术网

Javascript 返回值时未定义

Javascript 返回值时未定义,javascript,node.js,Javascript,Node.js,我有一个新项目。 根文件是index.js和文件helper.js,这里我有一些helper函数,它被导入到index.js。 我试图使用helper.js中的函数获取一些数据,但是当我在index.js中调用它时,它返回undefined。 但是在helper.js中,一切正常,console.log显示我需要的数据。 我怎样才能解决这个问题 index.js文件内容: const helper = require('./helper'); let data = helper.getData

我有一个新项目。 根文件是
index.js
和文件
helper.js
,这里我有一些helper函数,它被导入到
index.js
。 我试图使用
helper.js
中的函数获取一些数据,但是当我在
index.js
中调用它时,它返回
undefined
。 但是在
helper.js中,一切正常,
console.log
显示我需要的数据。 我怎样才能解决这个问题

index.js文件内容:

const helper = require('./helper');

let data = helper.getData();
console.log(data); // undefined
const fs = require('fs');

module.exports = {
  getData: () => {
    fs.readFile('data.json', 'utf8', (err, data) => {
      const allData = JSON.parse(data);
      console.log(allData); // IS OK!
      return allData;
    });
  }
}
helper.js文件内容:

const helper = require('./helper');

let data = helper.getData();
console.log(data); // undefined
const fs = require('fs');

module.exports = {
  getData: () => {
    fs.readFile('data.json', 'utf8', (err, data) => {
      const allData = JSON.parse(data);
      console.log(allData); // IS OK!
      return allData;
    });
  }
}
您可以使用:

然后:

helper.getData().then(function(data){
    console.log(data);
}, function(err){
    // here something failed
});

问题是,
fs.readFile
方法是异步的,不会给您任何结果数据

因此,一种选择是像我所做的那样使用回调函数,或者像@Tatsuyuki Ishi的回答中建议的那样使用回调函数。

你可以使用:

然后:

helper.getData().then(function(data){
    console.log(data);
}, function(err){
    // here something failed
});

问题是,
fs.readFile
方法是异步的,不会给您任何结果数据


因此,一种选择是像我所做的那样使用回调函数,或者像@Tatsuyuki Ishi的回答中所建议的那样使用回调函数。

问题是,
fs.readFile
是一个异步函数,因此不返回任何内容

如果您真的需要它返回一些东西,您可以使用同步版本


否则,一个更好的方法是让
getData
返回一个函数,然后使用
allData
解析
。问题是
fs.readFile
是一个异步函数,因此不返回任何内容

  getData: (callback) => {
    fs.readFile('data.json', 'utf8', (err, data) => {
      const allData = JSON.parse(data);
      console.log(allData); // IS OK!
      callback(allData);
    });
  }
如果您真的需要它返回一些东西,您可以使用同步版本


否则,一个更好的方法是让
getData
返回一个函数,然后使用
allData
解析
readFile
是一个异步函数,它接受回调。您有两个选择:

  getData: (callback) => {
    fs.readFile('data.json', 'utf8', (err, data) => {
      const allData = JSON.parse(data);
      console.log(allData); // IS OK!
      callback(allData);
    });
  }
一,。在
getData()
中获取回调作为参数

二,。使用同步版本

  getData: () => {
    var data = fs.readFileSync('data.json', 'utf8');
    const allData = JSON.parse(data);
    console.log(allData); // IS OK!
    return allData;        
  }

当然,您可以使用Promise,它在链接事物时更漂亮,但它通常与依赖项一起使用,例如。

readFile
是一个异步函数,它接受回调。您有两个选择:

一,。在
getData()
中获取回调作为参数

二,。使用同步版本

  getData: () => {
    var data = fs.readFileSync('data.json', 'utf8');
    const allData = JSON.parse(data);
    console.log(allData); // IS OK!
    return allData;        
  }

当然,您可以使用Promise,它在链接事物时更漂亮,但它通常与依赖项一起使用,例如。

问题是,您是从回调函数返回
所有数据,而不是从
getData
函数返回。由于
getData
没有显式的
return
,因此您的
helper.getData()
函数将返回
undefined
,并且将打印此值而不是您想要的值


我建议使用Promise正确地返回数据,如@sand的回答所示。

问题是,您是从回调函数返回
allData
,而不是
getData
函数。由于
getData
没有显式的
return
,因此您的
helper.getData()
函数将返回
undefined
,并且将打印此值而不是您想要的值


我建议使用Promise正确返回数据,如@sand的回答所示。

欢迎来到异步函数的精彩世界本主题使用promise获取异步函数的精彩世界欢迎来到异步函数的精彩世界本主题使用promise获取异步函数的精彩世界我在您的回答后删除了我的评论,懒得写承诺;)我不想打扰任何人,但我认为这是一个非常糟糕的答案,因为它只提出了一个解决方案,但没有用一个词解释根本的问题是什么。而且,所展示的解决方案只是一个任意的解决方案,它来自于一堆更多的解决方案——我为什么要使用承诺呢?我也可以回电话,例如:完美我在你回答后删除了我的评论,懒得写承诺;)我不想打扰任何人,但我认为这是一个非常糟糕的答案,因为它只提出了一个解决方案,但没有用一个词解释根本的问题是什么。而且,所展示的解决方案只是一个任意的解决方案,它来自于一堆更多的解决方案——我为什么要使用承诺呢?我也可以回电话,例如。