/*! * * Copyright 2017 - acrazing * * @author acrazing joking.young@gmail.com * @since 2017-11-25 14:10:30 * @version 1.0.0 * @desc sleep.ts */ export interface Timer extends Promise { clear(): void; } export function sleep(time: number): Timer { let clear = (): void => void 0 const timer = new Promise((resolve, reject) => { let state = 'pending' const handle = setTimeout(() => { if (state === 'pending') { state = 'fulfilled' resolve() } }, time) clear = () => { if (state === 'pending') { state = 'rejected' clearTimeout(handle) reject() } } }) as Timer timer.clear = clear return timer }