(rontolisp) docs
← 特殊形式

rontolisp:await

(rontolisp:await value)

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

多値

future は本体の最後のフォームのすべての値で確定し、await は関数呼び出しと同じくそれを多値として返します。フラット化された連鎖では最後の future の値が返り、future でない値は1つの値です。

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

CL-USER> (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 で捕捉できます: