diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 53a7e38ee3cf391f894ca5cab6ee9f8ce09e547f..88d57b4307e99b95826f0746360f617944fd886a 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -442,13 +442,13 @@ export function sequence(promiseFactories: ITask>[]): TPromise(promiseFactories: ITask>[], shouldStop: (t: T) => boolean = t => !!t): TPromise { +export function first(promiseFactories: ITask>[], shouldStop: (t: T) => boolean = t => !!t, defaultValue: T = null): TPromise { let index = 0; const len = promiseFactories.length; const loop: () => TPromise = () => { if (index >= len) { - return TPromise.as(null); + return TPromise.as(defaultValue); } const factory = promiseFactories[index++]; diff --git a/src/vs/platform/url/common/urlService.ts b/src/vs/platform/url/common/urlService.ts index f4fbab19d7dc926b7acda24f878bb9e029bdcd4a..2d7fda8b99fc79354d8c53547946a1588915dd9d 100644 --- a/src/vs/platform/url/common/urlService.ts +++ b/src/vs/platform/url/common/urlService.ts @@ -9,6 +9,7 @@ import { IURLService, IURLHandler } from 'vs/platform/url/common/url'; import URI from 'vs/base/common/uri'; import { IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { TPromise } from 'vs/base/common/winjs.base'; +import { first } from 'vs/base/common/async'; declare module Array { function from(set: Set): T[]; @@ -20,16 +21,9 @@ export class URLService implements IURLService { private handlers = new Set(); - async open(uri: URI): TPromise { + open(uri: URI): TPromise { const handlers = Array.from(this.handlers); - - for (const handler of handlers) { - if (await handler.handleURL(uri)) { - return true; - } - } - - return false; + return first(handlers.map(h => () => h.handleURL(uri)), undefined, false); } registerHandler(handler: IURLHandler): IDisposable { @@ -44,7 +38,7 @@ export class RelayURLService extends URLService implements IURLHandler { super(); } - async open(uri: URI): TPromise { + open(uri: URI): TPromise { return this.urlService.open(uri); } diff --git a/src/vs/workbench/parts/debug/browser/debugViewlet.ts b/src/vs/workbench/parts/debug/browser/debugViewlet.ts index 2cc3d77ddf926227683c857a5732533efdc3d4a0..30ffc30d939529db426736e2841d36a02253b82d 100644 --- a/src/vs/workbench/parts/debug/browser/debugViewlet.ts +++ b/src/vs/workbench/parts/debug/browser/debugViewlet.ts @@ -66,10 +66,10 @@ export class DebugViewlet extends ViewContainerViewlet { })); } - async create(parent: HTMLElement): TPromise { - await super.create(parent); - - DOM.addClass(parent, 'debug-viewlet'); + create(parent: HTMLElement): TPromise { + return super.create(parent).then(() => { + DOM.addClass(parent, 'debug-viewlet'); + }); } public focus(): void { diff --git a/src/vs/workbench/parts/files/electron-browser/explorerViewlet.ts b/src/vs/workbench/parts/files/electron-browser/explorerViewlet.ts index 57326f164777509723c2b5c3961db0d1acbf1ce1..257e5d350824b5a70862474c7dfa87599c8eb795 100644 --- a/src/vs/workbench/parts/files/electron-browser/explorerViewlet.ts +++ b/src/vs/workbench/parts/files/electron-browser/explorerViewlet.ts @@ -173,10 +173,10 @@ export class ExplorerViewlet extends ViewContainerViewlet implements IExplorerVi this._register(this.contextService.onDidChangeWorkspaceName(e => this.updateTitleArea())); } - async create(parent: HTMLElement): TPromise { - await super.create(parent); - - DOM.addClass(parent, 'explorer-viewlet'); + create(parent: HTMLElement): TPromise { + return super.create(parent).then(() => { + DOM.addClass(parent, 'explorer-viewlet'); + }); } protected createView(viewDescriptor: IViewDescriptor, options: IViewletViewOptions): ViewletPanel { diff --git a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts index f1dcc32c086e0e516f5ce4d907200f95e09c4b64..c32bfc0d3c4dc9b9130f72a90ac524af0b2e9be0 100644 --- a/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts +++ b/src/vs/workbench/parts/update/electron-browser/releaseNotesEditor.ts @@ -160,7 +160,7 @@ export class ReleaseNotesManager { return body; } - private async renderContent(text: string): TPromise { + private async renderContent(text: string): Promise { const renderer = await this.getRenderer(text); return marked(text, { renderer }); } diff --git a/src/vs/workbench/parts/url/electron-browser/url.contribution.ts b/src/vs/workbench/parts/url/electron-browser/url.contribution.ts index bc6c1f8faa39ed1be5140e3670afc15e8d1da9fc..375cfdad0a434a6614b9810df842a20472346445 100644 --- a/src/vs/workbench/parts/url/electron-browser/url.contribution.ts +++ b/src/vs/workbench/parts/url/electron-browser/url.contribution.ts @@ -27,11 +27,11 @@ export class OpenUrlAction extends Action { super(id, label); } - async run(): TPromise { - const input = await this.quickInputService.input({ prompt: 'URL to open' }); - const uri = URI.parse(input); - - this.urlService.open(uri); + run(): TPromise { + return this.quickInputService.input({ prompt: 'URL to open' }).then(input => { + const uri = URI.parse(input); + this.urlService.open(uri); + }); } }