only use setTimeout to implement