more idiomatic promise usage