then returns new promise
implement then method according to spec