diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 7d39986f8ddb0fad624c64fade83edca290937b7..d9177bec2c961ce523be3cce75aa66637c7e0ecd 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -86,8 +86,17 @@ export function asDisposablePromise(input: Thenable, cancelValue?: T, buck let promise = new TPromise((resolve, reject) => { dispose = function () { resolve(cancelValue); + if (isWinJSPromise(input)) { + input.cancel(); + } }; - input.then(resolve, reject); + input.then(resolve, err => { + if (errors.isPromiseCanceledError(err)) { + resolve(cancelValue); + } else { + reject(err); + } + }); }); let res = { promise,