33
*/
34
export function createCancelablePromise<T>(callback: (token: CancellationToken) => Promise<T>): CancelablePromise<T> {
35
>
const source = new CancellationTokenSource();
async.ts
36
>
37
>
const thenable = callback(source.token);
38
>
39
>
let isCancelled = false;
40
>
41
>
const promise = new Promise<T>((resolve, reject) => {
42
>
const subscription = source.token.onCancellationRequested(() => {
43
isCancelled = true;
44
subscription.dispose();
45
reject(new CancellationError());
47
>
Promise.resolve(thenable).then(value => {
48
subscription.dispose();
49
source.dispose();