add doc
add todo
finished promise
use Q.denodeify