Turns out, asynchronous totally ruins this whole process. It's working now.