From e1fbd9ce6a62439d4c604338f22bc8c70f1ebfa1 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 7 Sep 2018 11:01:25 +0200 Subject: [PATCH] debt - cleanup some of async.ts --- src/vs/base/common/async.ts | 23 +++++++------------ src/vs/base/common/winjs.polyfill.promise.ts | 6 ++++- .../contrib/message/messageController.ts | 4 ++-- .../outline/electron-browser/outlinePanel.ts | 4 ++-- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 2498d0bdfaf..d0272d53de5 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -8,7 +8,7 @@ import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import * as errors from 'vs/base/common/errors'; import { Emitter, Event } from 'vs/base/common/event'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; +import { Disposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import { ErrorCallback, TPromise, ValueCallback } from 'vs/base/common/winjs.base'; @@ -345,14 +345,6 @@ export function timeout(millis: number, token?: CancellationToken): CancelablePr }); } -/** - * - * @returns `true` if candidate is a `WinJS.Promise` - */ -export function isWinJSPromise(candidate: any): candidate is TPromise { - return isThenable(candidate) && typeof (candidate as any).done === 'function'; -} - /** * Returns a new promise that joins the provided promise. Upon completion of * the provided promise the provided function will always be called. This @@ -553,17 +545,18 @@ export class ResourceQueue { } } -export function setDisposableTimeout(handler: Function, timeout: number, ...args: any[]): IDisposable { - const handle = setTimeout(handler, timeout, ...args); - return { dispose() { clearTimeout(handle); } }; -} - export class TimeoutTimer extends Disposable { private _token: number; - constructor() { + constructor(); + constructor(runner: () => void, timeout: number); + constructor(runner?: () => void, timeout?: number) { super(); this._token = -1; + + if (typeof runner === 'function' && typeof timeout === 'number') { + this.setIfNotSet(runner, timeout); + } } dispose(): void { diff --git a/src/vs/base/common/winjs.polyfill.promise.ts b/src/vs/base/common/winjs.polyfill.promise.ts index c433743b794..fb80ee9569b 100644 --- a/src/vs/base/common/winjs.polyfill.promise.ts +++ b/src/vs/base/common/winjs.polyfill.promise.ts @@ -5,7 +5,11 @@ import { Promise as WinJSPromise } from './winjs.base'; import * as platform from 'vs/base/common/platform'; -import { isWinJSPromise } from 'vs/base/common/async'; +import { isThenable } from 'vs/base/common/async'; + +function isWinJSPromise(candidate: any): candidate is WinJSPromise { + return isThenable(candidate) && typeof (candidate as any).done === 'function'; +} /** * A polyfill for the native promises. The implementation is based on diff --git a/src/vs/editor/contrib/message/messageController.ts b/src/vs/editor/contrib/message/messageController.ts index 210faa8a026..ad00fce472f 100644 --- a/src/vs/editor/contrib/message/messageController.ts +++ b/src/vs/editor/contrib/message/messageController.ts @@ -7,7 +7,7 @@ import 'vs/css!./messageController'; import * as nls from 'vs/nls'; -import { setDisposableTimeout } from 'vs/base/common/async'; +import { TimeoutTimer } from 'vs/base/common/async'; import { KeyCode } from 'vs/base/common/keyCodes'; import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle'; import { alert } from 'vs/base/browser/ui/aria/aria'; @@ -75,7 +75,7 @@ export class MessageController extends Disposable implements editorCommon.IEdito this._messageListeners.push(this._editor.onDidChangeModel(() => this.closeMessage())); // close after 3s - this._messageListeners.push(setDisposableTimeout(() => this.closeMessage(), 3000)); + this._messageListeners.push(new TimeoutTimer(() => this.closeMessage(), 3000)); // close on mouse move let bounds: Range; diff --git a/src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts b/src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts index d821b36606c..00b7b5a9bcd 100644 --- a/src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts +++ b/src/vs/workbench/parts/outline/electron-browser/outlinePanel.ts @@ -13,7 +13,7 @@ import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox'; import { ProgressBar } from 'vs/base/browser/ui/progressbar/progressbar'; import { Action, IAction, RadioGroup } from 'vs/base/common/actions'; import { firstIndex } from 'vs/base/common/arrays'; -import { createCancelablePromise, setDisposableTimeout } from 'vs/base/common/async'; +import { createCancelablePromise, TimeoutTimer } from 'vs/base/common/async'; import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors'; import { Emitter } from 'vs/base/common/event'; import { defaultGenerator } from 'vs/base/common/idGenerator'; @@ -469,7 +469,7 @@ export class OutlinePanel extends ViewletPanel { let loadingMessage: IDisposable; let oldModel = this._tree.getInput(); if (!oldModel) { - loadingMessage = setDisposableTimeout( + loadingMessage = new TimeoutTimer( () => this._showMessage(localize('loading', "Loading document symbols for '{0}'...", posix.basename(textModel.uri.path))), 100 );