【发布时间】:2015-07-23 20:54:29
【问题描述】:
我正在尝试按特定顺序运行回调。
基本上我有一个gulp 任务,它接收一个包含四个 CSS 路径的数组。我需要缩小每个文件并打印有关进度的状态。类似的东西:
Minifying file AAA.css: OK
Minifying file BBB.css: OK
Minifying file CCC.css: FAIL
Minifying file DDD.css: OK
首先我写了Minifying file AAA.css,所以我运行了一些gulp 方法,然后on("end") 或on("error") 应该分别用OK\n 或FAIL\n 完成短语。
我的问题是它正在打印类似于:
Minifying file AAA.css: Minifying file BBB.css: {...} DDD.css: Finished {...}.
OK
OK
FAIL
OK
这就是我尝试做的:
gulp.task("watch", function () {
var files = [ "AAA.css", "BBB.css", "CCC.css", "DDD.css" ];
var promise = Q();
underscore.each(files, function (file) {
minify(promise, file);
});
return promise;
});
function minify(promise, file) {
promise.then(function() { write("Minifying " + file + ": ") });
promise.then(function() {
return gulp.src(file).{...}
.on("error", function() { write("FAIL"); })
.on("end", function() { write("OK"); })
});
}
我尝试使用 Q.defer() 并为循环中的每个文件创建一个承诺,但没有成功......喜欢:
function minify(file) {
var promise = Q();
promise.then(function() { write("Minifying " + file + ": ") });
promise.then(function() {
return gulp.src(file).{...}
.on("error", function() { write("FAIL"); })
.on("end", function() { write("OK"); })
});
return promise();
}
我该怎么办?也许 Promise 或 Deferred 不能解决我的问题?
编辑:我当前的代码是http://pastebin.com/tSaXH1iF
【问题讨论】:
-
所以你想放弃并行运行它们?
-
我不在乎
BBB.css是否在AAA.css之前缩小,但输出需要像Min BBB: OK... Min AAA: OK...。