Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

追記

下記の問題は 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 )も存在するが、マージされていないので、現状、上記のような解決策が必要になる。

参考

まとめ

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

bouzuya
ぼく、ぼうずや。なさけはひとのためならず。たのしいはせいぎ。
http://bouzuya.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away