All lifecycle methods should be wrapped with a promise