Node-REDがsplitでとまってしまう問題の対処法
最近、自宅サーバーでNode-REDを動かして遊んです。遊んでる中で、splitのタイミングで処理が止まってしまう問題が発生しました。今回はこの現象の原因と対処法を共有します。わりとみんなハマるのではないかと思える現象だったので、もしよかったら最後まで読んでみてください。
問題が発生したプログラムはこちらです。割とよくあるforループのような処理です。
最初にリストを取得し、リストをsplitで分割し、各要素に対して「hello {{要素}}」とテキスト出力します。すべての要素が出力し終わったら、後続の処理へ進みます。
このプログラムを実行すると次のように想定通りの出力結果になります。
リスト取得でtaro, jiroの配列を取得し、各要素に対して"hello {{要素}}"を出力し後続処理を実行しています。
一見、問題なさそうに見えますが、これをある状態で実行するsplitで処理が止まってしまい、後続の処理が実行されません。
せめてエラーなどの例外を吐いてくれれば良いのですが、それすらなく、処理が止まります。
問題:リストが空だとsplitが実行されない
一見問題なさそうなプログラムですが、次のように、リスト取得で空リストを返すように変更すると処理が止まります。
これを実行すると出力は次のようになります。
リスト取得で空配列が取得されたあと、出力がでません。つまり後続のプログラムが実行されずにとまっています。
原因:空リストの場合にsplitが止まる
問題の原因はsplitです。splitはリストを分割してくれますが、リストが空の場合に処理が止まってしまうようです。
Node-REDのバグと言っても良い気がしますがどうなんだろう…
対処法:リストが空かどうかをチェックする
splitで処理が止まらないように、splitの前にリストが空かどうかをチェックします。対処後のプログラムはこんな感じ。
splitの前にswitchを挿入し、リストが空ならsplitをスキップして後続の処理を実行します。リストが空ではない場合のみ、split以降の処理を実行します。
この実行結果がこちらです。
リストは空ですが、想定通り後続の処理が実行できました。
まとめ
今回はsplitで処理が止まってしまう問題について原因と対処法を共有しました。
原因は空リストです。splitを使うときは入力が空になる可能性があるかどうかに気をつけましょう。
この記事が気に入ったらサポートをしてみませんか?