add cancelable Timeout

This commit is contained in:
2017-06-05 00:32:01 +02:00
parent f8cfd99c8c
commit 75358d0b66
9 changed files with 390 additions and 72 deletions

View File

@ -1,13 +1,44 @@
import 'typings-global'
import * as smartq from 'smartq'
/**
* delay something, works like setTimeout
* @param timeInMillisecond
* @param passOn
*/
export let delayFor = async <T>(timeInMillisecond: number, passOn?: T) => {
await new Promise((resolve, reject) => {
setTimeout(
() => {
resolve()
},
timeInMillisecond
)
})
return passOn
await new Promise((resolve, reject) => {
setTimeout(
() => {
resolve()
},
timeInMillisecond
)
})
return passOn
}
export class Timeout<T> {
promise: Promise<T>
private _deferred: smartq.Deferred<T>
private _timeout: any
private _cancelled: boolean = false
constructor (timeInMillisecondArg, passOn?: T) {
this._deferred = smartq.defer<T>()
this.promise = this._deferred.promise
this._timeout = setTimeout(() => {
if (!this._cancelled) {
this._deferred.resolve(passOn)
}
}, timeInMillisecondArg)
}
makeUnrefed () {
this._timeout.unref()
}
cancel () {
this._cancelled = true
this.makeUnrefed()
}
}