等待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); }); }