イベントドリブンのプログラムで逐次処理を行うには、どうやればいいか?
Discussion
やりたいこと
ブラウザ上のjavascriptのようなイベントドリブン型のプログラムが動作する環境で、逐次処理を行いたいと思っています。
例えば以下のような処理を行いたいと考えています。
1: 「1番目の数字を入力してください。」と表示し、キー入力を待つ。
2: 「2番目の数字を入力してください。」と表示し、キー入力を待つ。
3: 「結果です。何かキーを押してください。」と表示と、1番目と2番目の数の合計を表示し、キー入力を待つ。
4: 1に戻る。
前提条件として、以下の制約があります。
・プログラム実行環境のjavascriptバージョンが古いため、async/awaitは利用できません。
・入力はイベントから受け取りたいため、prompt
などを利用してモーダルダイアログから入力を受け取ることはできません。
質問
イベントドリブンのプログラムで、後述の「switchで処理を分割する方法」のような問題を回避してスマートに逐次処理を記述する、うまい方法はないでしょうか?
async/awaitを利用する例(目的システムでは使えない)
async/awaitを利用すれば以下のようにスマートに記述ができますが、前述のようにasync/await目的システムでは使えません。
See the Pen Sequential processing (async/await) by culage (@culage) on CodePen.
switchで処理を分割する方法
他の方法としては以下のように泥臭くswitch
で処理を分割すればで一応実現は出来ます。
しかしこの方法は、変数スコープが無駄に広くなってしまう、ループ処理などが発生したときの対応が困難、といった問題があります。
See the Pen Sequential processing (async/await) by culage (@culage) on CodePen.