 <p>You can name the function used at <code>.then()</code>, recursively call same function at <code>.then()</code> of <code>doSomethingAsync()</code> call until <code>state == "finish"</code></p> <pre><code>// name function used at `.then()` somePromise.then(function re(data) { if(state == "finish") { return data; }; // DoSomething async then repeat these codes // call `re` at `.then()` chained to `doSomethingAsync()` doSomethinAsync(data).then(re); }).then((data) =&gt; console.log("finish", data)); </code></pre> <p>See also <a href="http://stackoverflow.com/questions/38034574/multiple-sequential-fetch-promise/">multiple, sequential fetch() Promise</a></p>