我正在写一个Yeoman生成器,我想复制一个目录。你可以在下面找到代码。它正常工作,但是,在复制完成后,我想执行像'npm install'这样的进一步操作。 由于复制是异步完成的,因此在复制所有文件之前执行'npm install'。我怎么能等到所有复制操作都完成?
this.expandFiles('**', {
cwd: this.sourceRoot(),
dot: true
}).forEach(function (el) {
this.copy(el, el);
}, this);
答案 0 :(得分:2)
使用this.copy
调用链.on
并在'end'
事件上运行您的函数。
this.copy(el, el)
.on('end', function() {
console.log("Copy is complete");
});
答案 1 :(得分:-1)
一种简单的方法是使用一个模块来控制循环流,例如异步,这样你就可以知道它何时完成。这是代码:
var me = this;
var async = require('async');
var array = this.expandFiles('**', {
cwd: this.sourceRoot(),
dot: true
});
async.each(array, function(el, callback) {
me.copy(...); // assuming that this copy() is synchronous
callback(null);
}, function(err) {
console.log("done with copying....");
});
答案 2 :(得分:-1)
你可以使用Yeoman的this.async()
首先,获得恢复生成器所需的功能:
var done = this.async();
完成复制后(可能在某些回调中),当您想要恢复生成器时,请致电done()
。