【发布时间】:2017-06-23 08:02:24
【问题描述】:
我对 nodejs、express 和 javascript 还是很陌生。 我有一个代码:
router.get('/', function(req, res, next) {
const content = fileReader();
res.render('index', { "content" : content } );
});
fileReader 正在使用 fs.readFileSync 在 for 循环中读取文件,因此它首先读取所有文件,然后返回一个大字符串。
这个字符串然后被传递给视图并渲染。
上面的代码工作正常,但是当我把它改成这样时:
router.get('/', function(req, res, next) {
res.render('index', { "content" : fileReader() } );
});
它不起作用。页面已渲染,但内容为空。
fileReader 函数:
const fileReader = function()
{
let low = 0;
let high = 9;
let content = "";
for( ; low <= high; low++ )
{
if( fs.existsSync( contentDir + "/" + low ) )
{
content += fs.readFileSync( contentDir + "/" + low, "utf-8" );
}
else
{
break;
}
}
return content;
}
有人能解释一下这里发生了什么吗?为什么在 fileReader() 完成之前调用渲染?不应该先执行函数并调用渲染等待结果吗?或者render和fileReader是并行调用的?
请解释一下。
【问题讨论】:
-
你能发布 fileReader() 的代码吗?
-
两个例子是相等的。你确定第一个会产生真正的结果吗?
-
@roughcoder 添加了文件读取器
-
@Jonasw 它当前读取了 3 个包含内容的文件并正确发送,我可以在浏览器中看到内容,但是使用第二个 sn-p 我不能
-
两者相等。错误在其他地方,查看控制台...
标签: javascript node.js express asynchronous