我想在加载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/

10-12 05:04