LoginSignup
2
3

More than 5 years have passed since last update.

Hubot の Help は非同期で読み込まれる

Last updated at Posted at 2014-10-24

追記

下記の問題は hubot@2.9.3 で解消されました。現在は同期的に読み込まれます。

問題

Hubot の Help の表示をテストしようと loadHubotScripts / load / loadFile しても Help が読み込まれない。

robot = new Robot(...)
robot.adapter.on 'connected', =>
  robot.load path.resolve(__dirname, '../../src/scripts')
  # この時点では help は読み込まれていない。script 自体は読み込まれているのに!
robot.run()

解決策

読み込み後、setTimeout などでタイミングをずらす。

robot = new Robot(...)
robot.adapter.on 'connected', =>
  robot.load path.resolve(__dirname, '../../src/scripts')
  # この無意味に思える setTimeout が重要。
  setTimeout ->
    # ここなら help が読み込まれている。
  , 10
robot.run()

原因

これは Hubot 本体の実装の不備である。 Hubot スクリプト自体は同期的に require() するのに対し、Hubot スクリプトのコメントは Robot#parseHelp() 内で fs.readFile() で非同期に読み込まれることに起因する。

おそらくタイミングをそろえることが望ましく、両方とも非同期にしてしまい完了を通知するようにするか、両方とも同期的にするかが良いと思う。

ちなみに修正用の PR ( https://github.com/github/hubot/issues/759 & https://github.com/github/hubot/pull/762 )も存在するが、マージされていないので、現状、上記のような解決策が必要になる。

参考

まとめ

でも、まあ、そんなところを厳密にしたいユーザーはそうそう居ないよね。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3