rework promise
add promise