refine ui
add promise