我正在学习如何编写一个yeoman-generator。我对以下代码有疑问。它通过添加var done = this.async();
并稍后在回调中调用该方法来说,我们可以使函数askFor()
成为异步函数。有人可以解释一下原因吗?
askFor: function() {
var done = this.async();
// Have Yeoman greet the user.
this.log(yosay('Welcome to the marvelous Myblog generator!'));
var prompts = [{
name: 'blogName',
message: 'What do you want to call your blog?',
default: 'myblog'
}];
this.prompt(prompts, function(props) {
this.blogName = props.blogName;
done();
}.bind(this));
}
以下是this.async
this.async = function() {
return function() {};
}
答案 0 :(得分:8)
只是因为纯粹的巧合寻找别的东西而陷入这个问题。
实际上,在this.async
阶段,run
会覆盖每个方法,以延迟执行直到完成或同步运行。
您可以在此处阅读相关代码行: https://github.com/yeoman/generator/blob/master/lib/base.js#L372-L393
所以基本上,在幕后Yeoman总是叫回调。当你调用this.async()
时,我们保留一个引用变量并返回回调。如果你不打电话,我们会在功能结束后手动调用回调。