我想在加载 CSS 时渲染页面。函数 css_parser.getCSSFiles()
异步读取文件并将 CSS 内容发送到变量 css.cssFile
。如何强制 res.render
等待文件读取结束?
router.get('/main', function(req, res) {
var directory = '../app/public/stylesheets/',
file = 'style_720.css';
css_parser.getCSSFiles(directory,file);
app.locals.css = css.cssFile;
res.render('ua', {
css: app.locals.css,
});
});
//js module
getCSSFiles: function(directory, fileName) {
var array = css.cssFile;
fs.readFile(directory + fileName, 'utf8', function(err, data) {
if (err) {
return console.log(err);
}
(array.push(data));
});
}
最佳答案
您必须更改 getCSSFiles()
以接受回调作为参数,然后让它在完成后调用该回调,然后您可以调用 res.render()
来自该回调内部。这是在 Node.js 中了解异步操作何时完成的常用方法。
没有其他方法可以知道它何时完成。它必须通过回调或某种事件通知(其中之一)来告诉您。
如果您向我们展示 getCSSFiles()
的代码,我们可能可以为您提供更具体的帮助。
你想要的最终结果(修改getCSSFiles()
之后)是这样的:
router.get('/main', function(req, res) {
var directory = '../app/public/stylesheets/',
file = 'style_720.css';
css_parser.getCSSFiles(directory,file, function(err, data) {
if (!err) {
res.render('ua', {css: data});
}
});
});
并且,将 getCSSFiles
更改为:
getCSSFiles: function(directory, fileName, callback) {
fs.readFile(directory + fileName, 'utf8', function(err, data) {
if (err) {
callback(err);
return console.log(err);
}
callback(null, data);
});
}
关于javascript - 等待 css_parser.getCSSFiles(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997911/