重构代码，支持回调检测