That is happening because of this line:
C#:
StartCoroutine(changeMorph());
This starts changeMorph in a new coroutine. So the setNewData() function returns immediately without waiting for changeMorph() to finish, while changeMorph() runs in the background.
I was able to fix this behaviour by changing the setNewData method's return type to IEnumerator, because it looks like the only convenient way to be able to wait for a coroutine to finish is use the syntax `yield return StartCoroutine(changeMorph())` and this can apparently only be done inside such a method.
Try out the attached script.
EDIT: Alternatively, you can also change the return type of changeMorph() function to void. It seems like the whole reason for it returning IEnumerator is because of `yield return new WaitForSeconds()`. I just tried this where I changed its return type to void and removed all the WaitForSeconds calls in it. It seems to work fine. But I tested with looks that have combined morphs so there isn't much to load. I am downloading a look which has a lot of morphs and I am gonna test with that.