@@ -84,24 +84,18 @@ class SimpleWorkerProtocol {
8484
8585 public sendMessage ( method : string , args : any [ ] ) : Promise < any > {
8686 let req = String ( ++ this . _lastSentReq ) ;
87- let reply : IMessageReply = {
88- resolve : null ,
89- reject : null
90- } ;
91- let result = new Promise < any > ( ( resolve , reject ) => {
92- reply . resolve = resolve ;
93- reply . reject = reject ;
94- } ) ;
95- this . _pendingReplies [ req ] = reply ;
96-
97- this . _send ( {
98- vsWorker : this . _workerId ,
99- req : req ,
100- method : method ,
101- args : args
87+ return new Promise < any > ( ( resolve , reject ) => {
88+ this . _pendingReplies [ req ] = {
89+ resolve : resolve ,
90+ reject : reject
91+ } ;
92+ this . _send ( {
93+ vsWorker : this . _workerId ,
94+ req : req ,
95+ method : method ,
96+ args : args
97+ } ) ;
10298 } ) ;
103-
104- return result ;
10599 }
106100
107101 public handleMessage ( serializedMessage : string ) : void {
@@ -110,6 +104,7 @@ class SimpleWorkerProtocol {
110104 message = JSON . parse ( serializedMessage ) ;
111105 } catch ( e ) {
112106 // nothing
107+ return ;
113108 }
114109 if ( ! message || ! message . vsWorker ) {
115110 return ;
@@ -191,8 +186,7 @@ export class SimpleWorkerClient<T> extends Disposable {
191186 constructor ( workerFactory : IWorkerFactory , moduleId : string ) {
192187 super ( ) ;
193188
194- let lazyProxyResolve : ( v : T ) => void = null ;
195- let lazyProxyReject : ( err : any ) => void = null ;
189+ let lazyProxyReject : ( ( err : any ) => void ) | null = null ;
196190
197191 this . _worker = this . _register ( workerFactory . create (
198192 'vs/base/common/worker/simpleWorker' ,
@@ -202,7 +196,9 @@ export class SimpleWorkerClient<T> extends Disposable {
202196 ( err : any ) => {
203197 // in Firefox, web workers fail lazily :(
204198 // we will reject the proxy
205- lazyProxyReject ( err ) ;
199+ if ( lazyProxyReject ) {
200+ lazyProxyReject ( err ) ;
201+ }
206202 }
207203 ) ) ;
208204
@@ -227,26 +223,25 @@ export class SimpleWorkerClient<T> extends Disposable {
227223 loaderConfiguration = ( < any > self ) . requirejs . s . contexts . _ . config ;
228224 }
229225
230- this . _lazyProxy = new Promise < T > ( ( resolve , reject ) => {
231- lazyProxyResolve = resolve ;
232- lazyProxyReject = reject ;
233- } ) ;
234-
235226 // Send initialize message
236227 this . _onModuleLoaded = this . _protocol . sendMessage ( INITIALIZE , [
237228 this . _worker . getId ( ) ,
238229 moduleId ,
239230 loaderConfiguration
240231 ] ) ;
241- this . _onModuleLoaded . then ( ( availableMethods : string [ ] ) => {
242- let proxy = < T > { } ;
243- for ( let i = 0 ; i < availableMethods . length ; i ++ ) {
244- ( proxy as any ) [ availableMethods [ i ] ] = createProxyMethod ( availableMethods [ i ] , proxyMethodRequest ) ;
245- }
246- lazyProxyResolve ( proxy ) ;
247- } , ( e ) => {
248- lazyProxyReject ( e ) ;
249- this . _onError ( 'Worker failed to load ' + moduleId , e ) ;
232+
233+ this . _lazyProxy = new Promise < T > ( ( resolve , reject ) => {
234+ lazyProxyReject = reject ;
235+ this . _onModuleLoaded . then ( ( availableMethods : string [ ] ) => {
236+ let proxy = < T > { } ;
237+ for ( let i = 0 ; i < availableMethods . length ; i ++ ) {
238+ ( proxy as any ) [ availableMethods [ i ] ] = createProxyMethod ( availableMethods [ i ] , proxyMethodRequest ) ;
239+ }
240+ resolve ( proxy ) ;
241+ } , ( e ) => {
242+ reject ( e ) ;
243+ this . _onError ( 'Worker failed to load ' + moduleId , e ) ;
244+ } ) ;
250245 } ) ;
251246
252247 // Create proxy to loaded code
@@ -290,10 +285,10 @@ export interface IRequestHandler {
290285 */
291286export class SimpleWorkerServer {
292287
293- private _requestHandler : IRequestHandler ;
288+ private _requestHandler : IRequestHandler | null ;
294289 private _protocol : SimpleWorkerProtocol ;
295290
296- constructor ( postSerializedMessage : ( msg : string ) => void , requestHandler : IRequestHandler ) {
291+ constructor ( postSerializedMessage : ( msg : string ) => void , requestHandler : IRequestHandler | null ) {
297292 this . _requestHandler = requestHandler ;
298293 this . _protocol = new SimpleWorkerProtocol ( {
299294 sendMessage : ( msg : string ) : void => {
@@ -353,29 +348,27 @@ export class SimpleWorkerServer {
353348 ( < any > self ) . require . config ( loaderConfig ) ;
354349 }
355350
356- let resolve : ( value ?: string [ ] ) => void ;
357- let reject : ( error ?: any ) => void ;
358- let r = new Promise < string [ ] > ( ( _resolve , _reject ) => {
359- resolve = _resolve ;
360- reject = _reject ;
361- } ) ;
362-
363- // Use the global require to be sure to get the global config
364- ( < any > self ) . require ( [ moduleId ] , ( ...result : any [ ] ) => {
365- let handlerModule = result [ 0 ] ;
366- this . _requestHandler = handlerModule . create ( ) ;
351+ return new Promise < string [ ] > ( ( resolve , reject ) => {
352+ // Use the global require to be sure to get the global config
353+ ( < any > self ) . require ( [ moduleId ] , ( ...result : any [ ] ) => {
354+ let handlerModule = result [ 0 ] ;
355+ this . _requestHandler = handlerModule . create ( ) ;
367356
368- let methods : string [ ] = [ ] ;
369- for ( let prop in this . _requestHandler ) {
370- if ( typeof this . _requestHandler [ prop ] === 'function' ) {
371- methods . push ( prop ) ;
357+ if ( ! this . _requestHandler ) {
358+ reject ( new Error ( `No RequestHandler!` ) ) ;
359+ return ;
372360 }
373- }
374361
375- resolve ( methods ) ;
376- } , reject ) ;
362+ let methods : string [ ] = [ ] ;
363+ for ( let prop in this . _requestHandler ) {
364+ if ( typeof this . _requestHandler [ prop ] === 'function' ) {
365+ methods . push ( prop ) ;
366+ }
367+ }
377368
378- return r ;
369+ resolve ( methods ) ;
370+ } , reject ) ;
371+ } ) ;
379372 }
380373}
381374
0 commit comments