Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 在节点js中返回数据_Javascript_Node.js_Factory - Fatal编程技术网

Javascript 在节点js中返回数据

Javascript 在节点js中返回数据,javascript,node.js,factory,Javascript,Node.js,Factory,我的申请表中有两个文件, DesignFactory.js: var fs = require('fs'); var dotenv = require('dotenv'); dotenv.load(); var designtokenfile = require ('./designtokenfile'); var designtokendb = require ('./designtokendb'); var TYPE=process.env.TYPE; var DesignFactory={

我的申请表中有两个文件, DesignFactory.js:

var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');
var TYPE=process.env.TYPE;
var DesignFactory={};
DesignFactory.storeDesign = function(TYPE) {
if (TYPE == 'file') {
  var data=design.designtokenfile.load();
  console.log(data);

} else if (TYPE == 'db') {
  return designtokendb;
}
};

module.exports.design=DesignFactory;
现在,我有另一个designtokenfile.js文件, designtokenfile.js:

var fs = require('fs');
var load = function() {
fs.readFile('output.txt', 'utf8', function (err,data) {

  return data;
 if (err) {
   return console.log(err);
 }
    });

 };

 module.exports.load=load;
所以我的问题是我无法从load方法返回数据。当我打印从load函数返回的storeDesign方法中的数据时,它显示undefined。 但是我想要output.txt的内容在storeDesign方法中。
请帮助我。

是异步的,因此您需要传递回调函数或使用由于异步的性质,您得到的
是未定义的。。请尝试以下代码:

var fs = require('fs');
var load = function(callback) {
fs.readFile('output.txt', 'utf8', function (err,data) {

  //return data;
   callback(null, data);
 if (err) {
   callback("error", null);
 }
    });

 };

 module.exports.load=load;

var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');
var TYPE=process.env.TYPE;
var DesignFactory={};
DesignFactory.storeDesign = function(TYPE) {
if (TYPE == 'file') {
  var data=design.designtokenfile.load(function(err, res){
   if(err){
   } else {
    console.log(data);
   }
}); 

} else if (TYPE == 'db') {
  return designtokendb;
}
};

module.exports.design=DesignFactory;
而不是:

var load = function() {
  fs.readFile('output.txt', 'utf8', function (err, data) {
    return data;
     if (err) {
       return console.log(err);
     }
  });
};
由于无法到达
返回
后的
如果
,则无法工作,请使用以下命令:

var load = function(cb) {
  fs.readFile('output.txt', 'utf8', function (err,data) {
     if (err) {
       console.log(err);
       return cb(err);
     }
     cb(null, data);
  });
};
var load = function(cb) {
  return new Promise(resolve, reject) {
     fs.readFile('output.txt', 'utf8', function (err, data) {
       if (err) {
         console.log(err);
         reject(err);
       }
       resolve(data);
     });
  });
};
然后像这样使用它:

load((err, data) => {
  if (err) {
    // handle error
  } else {
    // handle success
  }
});
load().then(data => {
    // handle success
}).catch(err => {
    // handle error
});
或者使用以下命令:

var load = function(cb) {
  fs.readFile('output.txt', 'utf8', function (err,data) {
     if (err) {
       console.log(err);
       return cb(err);
     }
     cb(null, data);
  });
};
var load = function(cb) {
  return new Promise(resolve, reject) {
     fs.readFile('output.txt', 'utf8', function (err, data) {
       if (err) {
         console.log(err);
         reject(err);
       }
       resolve(data);
     });
  });
};
然后像这样使用它:

load((err, data) => {
  if (err) {
    // handle error
  } else {
    // handle success
  }
});
load().then(data => {
    // handle success
}).catch(err => {
    // handle error
});
换句话说,您不能从异步函数的回调返回值。您的函数需要执行回调或返回承诺

您需要更多地了解节点的异步性质、承诺和回调。关于堆栈溢出,我可以推荐很多问题和答案:


回调可能重复使用