javascript - 为什么 Yeoman 不能在 exec 方法后执行异步回调?

标签 javascript asynchronous bower yeoman yeoman-generator

我正在尝试执行 async callback在我的行动之后bowerInstall方法已完成(问题与使用 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.
  }
}

最佳答案

Yeoman 安装方法在 install 任务循环中自动安排。

在此处使用 this.async() 会使进程陷入僵局。

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

关于javascript - 为什么 Yeoman 不能在 exec 方法后执行异步回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010821/

相关文章:

javascript - jQuery 在重置后保留克隆行数

javascript - 如何创建自己的 setTimeout 函数?

javascript - 生成 polymer 应用程序的 zip,不含所有非生产文件

javascript - 计时器在固定位置不倒计时

javascript - 从 HTML 表单按钮向 javascript 发送多个参数

javascript - Vue 2.0 : Passing asynchronous data to child component

version-control - 需要在 SCM/GIT 中提交的来自 Yeoman web-app 的文件

html - Sails.js Assets 管理和引用

javascript - AngularJs + Pubnub 数据绑定(bind)

asynchronous - Dart 2 : Difference between Future<void> and Future<Null>