Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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 node.js使代码等待fs.readFile完成_Javascript_Node.js_Fs - Fatal编程技术网

Javascript node.js使代码等待fs.readFile完成

Javascript node.js使代码等待fs.readFile完成,javascript,node.js,fs,Javascript,Node.js,Fs,我在node.js文件系统中遇到问题。 这是我的密码。 我的函数总是返回一个空字符串。 我想知道在readFile方法完成之前,是否有任何方法可以让我的函数停止执行 var fs = require('fs'); function myfun(filePath){ var str = ''; fs.readFile(filePath, function(err, data){ if(err) throw err; str = data; }); return st

我在node.js文件系统中遇到问题。 这是我的密码。 我的函数总是返回一个空字符串。 我想知道在readFile方法完成之前,是否有任何方法可以让我的函数停止执行

var fs = require('fs');
function myfun(filePath){
  var str = '';
  fs.readFile(filePath, function(err, data){
    if(err) throw err;
    str = data;
  });
  return str; //here, the variable str always return '' because the function doesn't wait for the readFile method complete.
}

添加解释

实际上我在做这样的事情: 函数myfun用于替换str 您可以看到我的代码:

function fillContent(content) {
  var rex = /\<include.*?filename\s*=\s*"(.+?)"\/>/g;
  var replaced = fileStr.replace(rex, function (match, p1) {
    var filePath = p1
    var fileContent = '';
    fs.readFile(filePath, function (err, data) {
      if (err) {
        throw err;
      }
      fileContent = data;
    });
    return fileContent;
  });
  return replaced;// here, the return value is used for replacement
}
函数fillContent(content){
var rex=/\/g;
var replaced=fileStr.replace(rex,函数(匹配,p1){
var filePath=p1
var fileContent='';
fs.readFile(文件路径、函数(错误、数据){
如果(错误){
犯错误;
}
fileContent=数据;
});
返回文件内容;
});
return replacement;//此处,返回值用于替换
}

我需要在replace函数中返回一个值,这就是为什么我没有使用回调函数的原因。如果需要同步执行回调函数,那么应该使用fs.readFileSync()


当文件读取结束时,您需要将回调传递给
myfun
函数,如下所示,以便从函数中获取数据:

var fs = require('fs');
function myfun(filePath, cb){
  var str = '';
  fs.readFile(filePath, 'utf8', function(err, data){
    if(err) throw err;
    cb(data);
  });
}

// call it like this 
myfun('some_path', function(data) { /* use returned data here */} );
您需要投入一些时间来更好地理解JavaScript的异步本质


代码的问题是
return str
readFile
回调之外,这意味着
return str
在调用
readFile
回调之前执行,以将
str
设置为有意义的值。

@GopinathShiva puting
return str在回调中不会有任何好处。OP您正在查找的
fs.readFileSync()
。如果您确实需要将其与
.replace()
一起使用,请使用
fs.readFileSync()
。谢谢robertklep,我想知道我在replace函数中使用fs是否是一种好方法这是使用nodejs的方法-尽管我可能会添加utf8编码参数,因为它看起来好像OP希望返回一个字符串。
var fs = require('fs');
function myfun(filePath, cb){
  var str = '';
  fs.readFile(filePath, 'utf8', function(err, data){
    if(err) throw err;
    cb(data);
  });
}

// call it like this 
myfun('some_path', function(data) { /* use returned data here */} );