this looks fragile to me. What if the returned value is not a promise but happens to have a `then()` function? :)