use promise on fetch to remove unnecessary timeout