概要 JavaScript Promiseの本 の 4.8 Promiseによる逐次処理 が読んでもピンとこなかったため、逐次処理で再帰呼び出しに頼ってきていましたが、自分でコードを書いてみてやっと理解できてきたのでまとめておきます。 前提 動作確認は node.js ver.5.7.0 で行っています。 Promise の最低限の知識は必要ですが、完璧に理解できている必要はありません(自分も理解できていません)。 再帰呼び出しサンプル fs.readdir()でルートディレクトリの各ファイルについて処理を行う簡単なサンプルを以下に示します。 処理はダミーとして1秒以内の乱数によるタイムアウトとしています。 ポイント 再帰呼び出しは、関数側で自身を呼び出します。そのため以下の注意が必要です。 関数は再帰呼び出しのため配列とインデックスを必要とする。 次の処理を行う時にインデックスを+1して
![Promiseでディレクトリの中のファイルごとに行う非同期再帰呼び出しをやめる - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/d895e19b1af2066e902a591c84ce7e165960296b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UHJvbWlzZSVFMyU4MSVBNyVFMyU4MyU4NyVFMyU4MiVBMyVFMyU4MyVBQyVFMyU4MiVBRiVFMyU4MyU4OCVFMyU4MyVBQSVFMyU4MSVBRSVFNCVCOCVBRCVFMyU4MSVBRSVFMyU4MyU5NSVFMyU4MiVBMSVFMyU4MiVBNCVFMyU4MyVBQiVFMyU4MSU5NCVFMyU4MSVBOCVFMyU4MSVBQiVFOCVBMSU4QyVFMyU4MSU4NiVFOSU5RCU5RSVFNSU5MCU4QyVFNiU5QyU5RiVFNSU4NiU4RCVFNSVCOCVCMCVFNSU5MSVCQyVFMyU4MSVCMyVFNSU4NyVCQSVFMyU4MSU5NyVFMyU4MiU5MiVFMyU4MiU4NCVFMyU4MiU4MSVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MGM4MmZiMGIwYWRjNWU5NTNjNzQ3OGQzMWUxNzg4NTc%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0cGlzaGkmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTQ3ZjhmM2UxNjBmZGM3NGM1YmJjZjMzYTQ4ODczY2Qw%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D5367355a517c18803d8a85087ba392e4)