refactor _postEvent to return a promise