Control Flow
async
$async
$async[name] opens a block closed by $endAsync. The body of the block runs at the same time as the statements that follow $endAsync: both advance in turn each time one of them waits (for a Discord call, an HTTP request, a delay). $await[name] waits for the block to finish.
Syntax
$async[name]
...
$endAsync
Parameters
| Parameter | Description |
|---|---|
name |
Required, exactly one argument (otherwise Invalid argument count for $async: N.). Evaluated when the block starts, then trimmed. It must be unique in the execution: reusing it raises Async block "name" already exists. |
Behavior
- Text of the block. What the body writes is never sent. It is only returned by
$await[name]. - Unawaited blocks. A block nobody awaits is waited for before the response is sent: it is never lost and never runs after the interaction has expired. (In BDFD itself the script ends without waiting for it.)
- Shared state. Temporary variables,
$setVarand the services are shared with the rest of the script. The stack of user functions, loops and calls is private to the block (copied when it starts): a block started inside a$forsees the value of its own iteration. $stop,$break,$continueonly end the block, not the script.- Errors. An error in a block only surfaces at
$await[name](where$trycan catch it) or, if nobody awaited the block, when the script ends. A script that fails stops its running blocks at their next step. - Limits.
- 25 blocks per execution at most (
Too many async blocks (25 at most).). $asynccannot be written inside the argument of another function; it is a top-level structure.- Steps of the blocks count in the script’s step limit, and the command’s time budget (15 minutes) bounds
$awaitand the wait for the end of the blocks.
- 25 blocks per execution at most (
- Structure errors.
Missing $endasync.,Unexpected $endasync..
Examples
$async[stats]
$httpGet[https://example.com/stats.json]
$httpResult
$endAsync
$async[quote]
$httpGet[https://example.com/quote.txt]
$httpResult
$endAsync
Stats: $await[stats]
Quote: $await[quote]
The two requests run together; the response is written once both are done.
Try it
Paste an example into the playground to preview its message (functions that act on Discord are not run), or build the same thing with blocks.