【问题标题】:Why Yeoman can't perform async callback after exec method?为什么 Yeoman 在 exec 方法之后不能执行异步回调?
【发布时间】:2023-03-12 04:34:01
【问题描述】:

bowerInstall 方法完成后,我正在尝试在我的操作中执行async callback(问题与使用 exec 命令的其他方法相同)。我需要这个,因为没有它,下一个动作将在方法完成之前触发。

     _-----_
    |       |    .--------------------------.
    |--(o)--|    |   Yeoman is frustrated   |
   `---------´   |     Help him please!     |
    ( _´U`_ )    '--------------------------'
    /___A___\
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

问题是 Yeoman 不支持位于方法回调中的异步回调。

default: {
  installPackage: function () {
    done = this.async();
    this.bowerInstall(this.packageName, function () {
      done();
    });
  },
  nextAction: function () {
    // Do stuff after installPackage is completed.
  }
}

在这种情况下,不会触发 bowerInstall 方法并且运行循环会中断。

[编辑] 解决方案

就像 Simon Boudrias 所说,我不能在安装上下文中使用异步回调。我必须将安装后要运行的任务放在最终上下文中。

install: {
  installPackage: function () {
    this.bowerInstall(this.packageName);
  }
},
end: {
  nextAction: function () {
    // Do stuff after installPackage is completed.
  }
}

【问题讨论】:

  • 对此没有帮助,但您不需要将 done 包装在函数中然后调用它。只是通过它未调用。例如this.bowerInstall(this.packageName, done)
  • @Patrick 是的,这是真的,但我在方法回调中做了其他事情。

标签: javascript asynchronous bower yeoman yeoman-generator


【解决方案1】:

Yeoman 安装方法会在 install 任务循环期间自动安排。

通过在此处使用this.async(),您将导致进程陷入僵局。

此更改记录在 the v0.18.0 release 上。可能值得在安装方法文档中更明确地详细说明该行为 -> https://github.com/yeoman/yeoman.io/blob/master/app/authoring/dependencies.md

【讨论】:

  • 感谢您关注西蒙。我借此机会感谢您为社区创建的所有出色工具。我用你的解决方案编辑我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多