Asynchronous Recursion in JavaScript