等待css_parser.getCSSFiles()
我想在CSS加载时呈现页面。 函数css_parser.getCSSFiles()
asynchronous读取文件并将CSS内容发送到variablescss.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()
来接受一个callback作为参数,然后当它完成时调用该callback,然后你可以从该callback中调用res.render()
。 这是在node.js中完成asynchronous操作的常用方法。
没有其他办法知道什么时候完成。 它必须通过callback或某种事件通知(一个或另一个)告诉你。
如果您向我们展示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); }); }