我是Java语言的新手,我看到的是,这里可能存在异步代码问题:
我有一个函数可以在主生成器中调用composewith。在该函数中调用composeWith之前,如果需要,我使用yosay()。
我的问题是所有yoSay函数在任何composeWith之前被调用。
这是我的代码: 编写和_composeWith函数
async writing() {
this.log('Before subGenerator 1 ======================================');
if (this.answers.licence) {
await this._ComposeWith(constants.license);
}
this.log('After subGenerator 1 ======================================');
this.log('Before subGenerator 2 ======================================');
if (this.answers.dockerized) {
await this._ComposeWith(constants.docker, {
options: {
packageManager: this.answers.packageManager,
destinationRoot: this._generateRoot()
}
});
}
this.log('After subGenerator 2 ======================================');
}
async _ComposeWith(configObject, args = undefined) {
if (configObject.displayYeoman) {
this.log('YEOMAN ======================================');
//Have Yeoman asking the user some more questions
this.log(
yosay(
`I will now ask you some questions about ${chalk.red(
configObject.context
)} !`
)
);
}
this.log('Calling composeWith ======================================');
this.composeWith(require.resolve(configObject.generator), args);
}
除了在_ComposeWith中打印yosay之外,其他所有操作均符合预期。
输出示例:
Before subGenerator 1 ====================================== YEOMAN ====================================== _-----_ ╭──────────────────────────╮ | | │ I will now ask you some │ |--(o)--| │ questions about the │ `---------´ │ license ! │ ( _´U`_ ) ╰──────────────────────────╯ /___A___\ / | ~ | __'.___.'__ ´ ` |° ´ Y ` Calling composeWith ====================================== After subGenerator 1 ====================================== Before subGenerator 2 ====================================== YEOMAN ====================================== _-----_ | | ╭──────────────────────────╮ |--(o)--| │ I will now ask you some │ `---------´ │ questions about docker ! │ ( _´U`_ ) ╰──────────────────────────╯ /___A___\ / | ~ | __'.___.'__ ´ ` |° ´ Y ` Calling composeWith ====================================== After subGenerator 2 ====================================== ? What's your name: John Doe ? Your email (optional): john.doe@example.com ? Your website (optional): ? Which license do you want to use? Apache 2.0 ? Which version of node will you run in the container? 8 ? Whick package manager will you use? npm create LICENSE create Dockerfile create .dockerignore
任何帮助/解释我的错误将不胜感激! :)
答案 0 :(得分:0)
我认为您遇到run loop的问题。
Yeoman按特定顺序安排某些任务,这适用于组合生成器。我建议reading the documentation,看看是否有帮助。
如果只有一个生成器,那么按顺序运行任务就可以了。 但是,一旦开始将生成器组合在一起,这还不够。
这就是Yeoman使用运行循环的原因。
运行循环是具有优先级支持的队列系统。我们使用 分组队列模块处理运行循环。
优先级在您的代码中定义为特殊的原型方法名称。 当方法名称与优先级名称相同时,运行循环将推送 该方法放入此特殊队列中。如果方法名称不匹配 优先级,它将被推送到默认组中。