add promise and wrap by in es6 api