Gulp 如何使变量在fs.readFile回调函数之外可见

zazmityj  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(174)

我在我的gulpfile.js中有以下任务:

function compileHandlebars() {
    options = {
        batch: ['./src/views/modules/*.hbs']
    }

    let data;
    
    fs.readFile('./data.json', 'utf-8', (error, content) => {
        if(error) throw error;
        data = content;
        console.log(data) // --> outputs actual content
    });

    console.log(data); // --> outputs undefined

    return gulp.src('./src/views/layouts/index.hbs')
        .pipe(handlebars(data)) // <-- receives 'undefined' as an argument
        .pipe(rename('index.html'))
        .pipe(gulp.dest('dist'));
    };

它应该加载data.json内容并将其分配给一个名为'data'的变量,以便它可以在管道中的handlebars()函数中使用,以从模板形成html。问题是,一旦我将console.log()移出fs.readFile()回调范围,它就会输出'undefined'。我如何使'data'变量保持我在回调函数中设置的值?

s4chpxco

s4chpxco1#

当前的调用异步运行,所以它在代码移到下一行时执行任务,然后在完成时触发回调。因此,在继续下一步之前,需要等待读取完成。
请尝试使用readFileSync

// Include fs module
const fs = require('fs');
  
// Calling the readFileSync() method
// to read 'input.txt' file
const data = fs.readFileSync('./input.txt', {encoding:'utf8'});
 
// Display the file data
console.log(data);

相关问题