如何在我的应用程序中承诺一次性使用 gulp?
How can I promise-ify a one-off usage of gulp in my application?
作为我正在编写的小程序的一部分,我想使用 gulp 将大量文件转换为 markdown。这不是与程序分开的构建步骤的一部分。这是该计划的一部分。所以我没有使用 gulp 文件来处理这个问题。
问题是,因为它是异步的,所以我想使用一个承诺,它会在 gulp 任务完成时提醒我。
像这样的东西是理想的:
io.convertSrc = function() {
var def = q.defer();
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist), function() {
def.resolve('We are done!');
});
return def.promise;
}
但是 pipe
没有回调。我怎么能处理这个?感谢您的帮助,我是 gulp 的新手。
由于 Gulp 任务是一个流,您可以监听它的事件:
io.convertSrc = function() {
var def = q.defer();
var stream = gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist));
stream.on('end', function() {
def.resolve();
});
stream.on('error', function(err) {
def.reject(err);
});
return def.promise;
};
gulp 中的所有内容都是一个流,因此您可以只监听 end
和 error
事件。
io.convertSrc = function() {
var def = q.defer();
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist))
.on('end', function() {
def.resolve();
})
.on('error', def.reject);
return def.promise;
}
顺便说一句,Q 1.0 is no longer developed (aside from a few fixes here and there) and will be wholly incompatible with Q 2.0; I'd recommend Bluebird 作为替代。
另外值得一提的是,NodeJS 0.12 及更高版本内置了 ES6 promises(不需要 --harmony
标志)所以如果你不寻求向后兼容性,你可以直接使用它们..
io.convertSrc = function() {
return new Promise(function(resolve, reject) {
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist))
.on('end', resolve)
.on('error', reject);
});
};
作为我正在编写的小程序的一部分,我想使用 gulp 将大量文件转换为 markdown。这不是与程序分开的构建步骤的一部分。这是该计划的一部分。所以我没有使用 gulp 文件来处理这个问题。
问题是,因为它是异步的,所以我想使用一个承诺,它会在 gulp 任务完成时提醒我。
像这样的东西是理想的:
io.convertSrc = function() {
var def = q.defer();
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist), function() {
def.resolve('We are done!');
});
return def.promise;
}
但是 pipe
没有回调。我怎么能处理这个?感谢您的帮助,我是 gulp 的新手。
由于 Gulp 任务是一个流,您可以监听它的事件:
io.convertSrc = function() {
var def = q.defer();
var stream = gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist));
stream.on('end', function() {
def.resolve();
});
stream.on('error', function(err) {
def.reject(err);
});
return def.promise;
};
gulp 中的所有内容都是一个流,因此您可以只监听 end
和 error
事件。
io.convertSrc = function() {
var def = q.defer();
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist))
.on('end', function() {
def.resolve();
})
.on('error', def.reject);
return def.promise;
}
顺便说一句,Q 1.0 is no longer developed (aside from a few fixes here and there) and will be wholly incompatible with Q 2.0; I'd recommend Bluebird 作为替代。
另外值得一提的是,NodeJS 0.12 及更高版本内置了 ES6 promises(不需要 --harmony
标志)所以如果你不寻求向后兼容性,你可以直接使用它们..
io.convertSrc = function() {
return new Promise(function(resolve, reject) {
gulp.src(src + '/*.md')
.pipe(marked({}))
.pipe(gulp.dest(dist))
.on('end', resolve)
.on('error', reject);
});
};