Node.js让代码等待fs. js文件.readFile已完成
node.js make code wait until the fs.readFile is completed
我在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
}
我需要在替换函数中返回值,所以这就是为什么我没有使用回调函数
如果你需要同步,那么你应该使用fs.readFileSync() (https://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_options)来代替。
var fs = require('fs');
function myfun(filePath){
return fs.readFileSync(filePath);
}
为了在文件读取结束时从函数中获取数据,您需要像下面这样传递回调给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
为一个有意义的值。
相关文章:
- JS文件的路径正在消失
- 我的外部js文件无法加载
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 动态加载和卸载js文件
- 如何将变量传递到另一个js文件
- 如何将所有JS文件连接到一个文件夹中
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- 如何将模板中的标记脚本移动到.js文件中
- 什么's是连接供应商js文件的最佳方式
- 如何在定义js文件后为外部javascript文件设置变量
- 如何在JS文件中获取资源(.resx)字符串
- 将*.js文件的内容放入Object中
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 如何使用Gmail运行.js文件
- 如何定义一个模块并使用它来分离js文件
- Angular JS文件上传到托管服务器
- 如何引用HTML中节点模块中的js文件
- 如何将JS文件从其他文件夹链接到页面