嗨,我正在尝试执行的功能出现问题。
我试图连接,编译和缩小一些js
和coffeescript
,当我对其进行硬编码时,我工作正常。我的问题是我现在创建了一个搜索文件并返回带有文件路径的数组的函数。但我无法以同步方式获得该功能。我已经尝试了很多东西,只是想不通。
在这个阶段,这就是我所拥有的,
此函数用于编译咖啡脚本,这也是由async.series调用的,可以正常工作。你可以看到它调用getFiles,它应该返回数组。但回调似乎在数据恢复之前触发了
function compileCoffee() {
async.series([
function(callback) {
data = getFiles("coffee");
callback(null, data)
},
function(data, callback) {
console.log(data)
shell.echo(grey("Compiling CoffeeScript files .... "));
if (shell.cat(data).exec('coffee -sc').exec('uglifyjs --compress', {
silent: true
}).to('./public/assets/js/app.min.js').code !== 0) {
shell.echo(red('Coffee script compile error'));
shell.exit(1);
}
shell.echo(green("CoffeeScript files compiled succesfully"));
},
], () => {});
}
然后这是get files函数。我很可能会把这一切都弄错,如果我愿意请让我知道一个更好的方法。如果没有,你知道如何使它工作将是惊人的。
function getFiles(filetype, callback) {
var files = [];
// Walker options
var walker = walk.walkSync('./frontend/js', {
followLinks: false
});
walker.on('file', function(root, stat, next) {
// Add this file to the list of files
var ext = stat.name.substr(stat.name.lastIndexOf('.') + 1);
if (ext == filetype) {
files.push(root + '/' + stat.name);
}
next();
});
walker.on('end', function() {
console.lof(files)
return files
})
}
请帮助一下:D谢谢
答案 0 :(得分:0)
getFiles
实际上并没有返回任何内容,但确实需要在getFiles
完成时调用的回调。将async
回调传递给getFiles
(或创建另一个调用回调的函数):
function(callback) {
data = getFiles("coffee", callback);
},
您需要在getFiles
函数中实际调用此回调:
walker.on('error', function(error) {
console.log(error)
callback(error);
});
walker.on('end', function() {
console.log(files)
callback(null, files);
});