質問: 'YYYYYY'; break; } deferred.reject(errCode); return deferred.promise(); } ``` ### 補足情報(FW/ツールのバージョンなど) IE11 ECMAScript 5 jquery-2.2.4 ### 追記 冒頭の書き出しに関して誤解が生じてたので修正しました。
回答: > > then()内にthen()を書くのは一般的ではないのでしょうか? > > その場合、途中で正常処理による中断を行いたい場合はどのようにするのでしょうか? > > > then()内にthen()を書くというよりは、then()内で別の非同期処理を実行するという表現になるかと思いますが、別に何も問題はありません。 一般的かどうかと問われると知りません。 そう書かざるを得ないなら書きますし、別の手段で書けそうなら別の手段で書いてもいいです。 また、「途中で正常処理による中断」というのがよくわかりません。 もう少し具体的にどうしたいのか整理してみたらいいと思います。 自分が何をどうしたいのかはっきりさせていけば、他の書き方も思いつくかもしれません。 最低限「何を」「いつ」「どこで」「どのように」するのか、「なぜ」そうしたいのかを明確にして、日本語で書いたものを可能な限り関数名等に置き換えていくといいと思います。 > > いくつかのthenチェーンを含む関数(loadSessionDataA()のような)を定義し、 > > その関数から派生させてthen()をチェーンさせてくべきではなのでしょうか? > > > 「その関数から派生させて」の意味がよくわかりません。 > > then()内に定義する関数ですがこれは外出しして定義するべきなのでしょうか? > > また、そのほうが可読性が良いですか? > > 個人的にはthen内に定義するほうが処理を上から順に追っていけますし、変数名を考えなくて済むので楽なんですが・・・ > > > 「可読性」はわりと好みが出ます。 「個人的には」ではなく、チームや組織のルールに従うのがベストです。 ルールがないならチーム内で作りましょう。 よくあるルールとしては、1つの関数内の行数XXX行以下、とかですかね。 長くなりすぎるなら切り出すし、短いならそのまま書いちゃうといいです。 切り出し方は個人で好きにすればいいと思います。 エラー処理だけ別で切り出すとかもよくある方法です。 極論を言えば、意図した通り大きなバグもなく動いているならそのソースコードは間違っていません。 理想がどうとか、読みやすさがどうとかは個々人の価値観によって違ってきますので、絶対的な正解を提示することは不可能です。 例えば私が仕事上で行うソースコードレビューにしても、修正は「提案」であって「強制」ではありません。 レビューコメントから議論が起きて検証合戦がはじまったりもします。 非同期処理が完璧に意図通りに動いているかの検証はなかなか難しいところもありますが、例えば一部の処理を極端に遅くしたときに意図した順で動いているかとか、全部の処理を極端に遅く(通信なら通信自体を遅くする)したときに問題ないかとか、非同期処理内でエラーが発生したときに意図した挙動になるかをひとつずつ順に見ていくとか、そうやって事細かに全パターンのテストをしていけば、同時に処理の流れもわかってきます。 そのうえで、ここはこう書き換えた方がテストしやすいとか、後日自分で読んで読みにくかったところを修正するだとか、そういうこともできるかと思います。