(rontolisp) docs
← 特殊形式

rontolisp:await

(rontolisp:await value)

future を与えると、future が確定するまで現在の非同期関数をサスペンドし、確定値を返します。確定済みの future はサスペンドせず、ネストした future はフラット化され、future でない値はそのまま通過します — JavaScript でプロミス以外を await した場合と同じで、「future かもしれない値」に一律に await を適用できます。

await は特殊形式で、rontolisp:async-defun / rontolisp:async-lambda の本体内とトップレベル (トップレベルは暗黙に非同期です) でのみ使えます。それ以外の場所 — 普通の defunlambda の本体、たとえ非同期本体の内側にネストしていても — ではコンパイル/定義時のエラーになります:

> (defun bad () (rontolisp:await 1))
rontolisp:await is only allowed inside rontolisp:async-defun/async-lambda or at top level

エラー

エラーで確定した future は、そのコンディションを await の時点で再シグナルします — await を囲む handler-case で捕捉できます: