Skip to content

Commit

Permalink
Adding deferInitialization docs. Fixes #1304.
Browse files Browse the repository at this point in the history
  • Loading branch information
Filip Maj committed Feb 10, 2022
1 parent 9782020 commit f6fc378
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
35 changes: 35 additions & 0 deletions docs/_advanced/deferring_initialization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
title: Deferring App initialization
lang: en
slug: deferring-initialization
order: 8
---

<div class="section-content">
Bolt offers a way to defer full initialization via the `deferInitialization` option and to call the equivalent `App#init()` in your code, putting more control over asynchronous execution required for initialization into your hands as the developer.

_Note: If you call `start()` before `init()`, Bolt will raise an exception._
</div>

```javascript
const { App } = require('@slack/bolt');

// deferInitialization is one of the options you can set in the constructor
const app = new App({
token,
signingSecret,
deferInitialization: true,
});

(async () => {
try {
// Must call init() before start() within an async function
await app.init();
// Now safe to call start()
await app.start(process.env.PORT || 3000);
} catch (e) {
console.log(e);
process.exit(1);
}
})()
```
35 changes: 35 additions & 0 deletions docs/_advanced/ja_deferring_initialization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
title: アプリの初期化の遅延
lang: ja
slug: deferring-initialization
order: 8
---

<div class="section-content">
Bolt は `deferInitialization` というオプションを使うことで、アプリの初期化処理の完了を遅延させることができます。このオプションを使う場合、あなたのコードの中で遅延された初期化処理部分に対応する `App#init()` メソッドを呼び出す必要がありますが、こうすることで初期化に必要となる非同期処理の実行をよりコントロールすることが可能となります。

_注意: `init()` メソッドを呼び出す前に `start()` メソッドを呼び出した場合、 Bolt は例外を発生させます。_
</div>

```javascript
const { App } = require('@slack/bolt');

// deferInitialization はコンストラクターで指定できるオプション
const app = new App({
token,
signingSecret,
deferInitialization: true,
});

(async () => {
try {
// 非同期関数の中で start() メソッドを呼び出す前に init() メソッドを呼び出すこと
await app.init();
// init() メソッドを呼び出したので、`start()` メソッドを安全に呼び出すことができる
await app.start(process.env.PORT || 3000);
} catch (e) {
console.log(e);
process.exit(1);
}
})()
```
1 change: 1 addition & 0 deletions docs/_tutorials/ja_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ App オプションは、`App` のコンストラクターに渡します。
| `clientOptions.slackApiUrl` | Slack Web API で使用するエンドポイントをカスタマイズできます。これが使用されるのはほとんどがテスト用途です。 |
| `socketMode` | 真偽値を指定するオプションで、`true` に設定するとアプリは[ソケットモード](/bolt-js/ja-jp/concepts#socket-mode)で起動します。ソケットモードは WebSocket のコネクションを通して Slack からのデータを受信する機能です。デフォルトは `false` です。
| `developerMode` | デベロッパーモードを有効にする真偽値です。 `true` に設定したとき、`logLevel``DEBUG``socketMode``true` に自動的に設定されます。しかし、 これらの二つのプロパティを明示的に設定した場合、それらの設定が `developerMode` による設定よりも優先されます。さらに、デバッグをしやすくするためのカスタムの OAuth エラーハンドラーも提供されます。また、全ての Slack からのリクエストのボディがログ出力されるため、トークンのようなセンシティブな情報がログに含まれる可能性があります。デフォルトは `false` です。|
| `deferInitialization` | アプリの初期化を遅延させる真偽値です。有効にすると非同期の `App#init()` メソッドを手動で呼び出す必要があります。 また `init()` メソッドは `App#start()` を実行する前に呼び出さなければなりません。 デフォルトは `false` です。 |

> Bolt のclientは [Node Slack SDK](/node-slack-sdk)`WebClient` のインスタンスです。そのため、Node Slack SDK のドキュメントも合わせて参照すると、開発時の理解に役立つでしょう。
Expand Down
1 change: 1 addition & 0 deletions docs/_tutorials/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ App options are passed into the `App` constructor. When the `receiver` argument
| `clientOptions.slackApiUrl` | Allows setting a custom endpoint for the Slack API. Used most often for testing. |
| `socketMode` | Option that accepts a `boolean` value. When set to `true` the app is started in [Socket Mode](/bolt-js/concepts#socket-mode), i.e. it allows your app to connect and receive data from Slack via a WebSocket connection. Defaults to `false`.
| `developerMode` | `boolean` to activate the developer mode. When set to `true` the `logLevel` is automatically set to `DEBUG` and `socketMode` is set to `true`. However, explicitly setting these two properties takes precedence over implicitly setting them via `developerMode`. Furthermore, a custom OAuth failure handler is provided to help debugging. Finally, the body of all incoming requests are logged and thus sensitive information like tokens might be contained in the logs. Defaults to `false`. |
| `deferInitialization` | `boolean` to defer initialization of the app and places responsibility for manually calling the `async` `App#init()` method on the developer. `init()` must be called before `App#start()`. Defaults to `false`. |

> Bolt's client is an instance of `WebClient` from the [Node Slack SDK](/node-slack-sdk), so some of that documentation may be helpful as you're developing.
Expand Down

0 comments on commit f6fc378

Please sign in to comment.