ensure optional success/error callbackes get called when re-using promises