Please modify getSoundFilenames() to cache the filenames. As it stands it looks like you're doing an XHR for each get() call. 

I'm still getting used to the Promises api.  I guess that the return value of then() is another Promise object that resolves when the then callback resolves?