得考虑timer, 传递callback的话, 会导致callback被调用两次