TaskManager#ensureWorker method guarantees worker is up and running. Helps to mitigate race condition on UI launch
This commit is contained in:
parent
dfb2b1bc8a
commit
296a024c4b
2 changed files with 24 additions and 2 deletions
|
@ -52,6 +52,14 @@ class App.Controller extends Spine.Controller
|
||||||
@controllerId
|
@controllerId
|
||||||
)
|
)
|
||||||
|
|
||||||
|
one: (event, callback) =>
|
||||||
|
App.Event.bind(
|
||||||
|
event
|
||||||
|
callback
|
||||||
|
@controllerId
|
||||||
|
true
|
||||||
|
)
|
||||||
|
|
||||||
unbind: (event, callback) =>
|
unbind: (event, callback) =>
|
||||||
App.Event.unbind(
|
App.Event.unbind(
|
||||||
event
|
event
|
||||||
|
|
|
@ -59,6 +59,10 @@ class App.TaskManager
|
||||||
return if !_instance
|
return if !_instance
|
||||||
_instance.worker(key)
|
_instance.worker(key)
|
||||||
|
|
||||||
|
@ensureWorker: (key, callback) ->
|
||||||
|
return if !_instance
|
||||||
|
_instance.ensureWorker(key, callback)
|
||||||
|
|
||||||
@nextTaskUrl: ->
|
@nextTaskUrl: ->
|
||||||
return if !_instance
|
return if !_instance
|
||||||
_instance.nextTaskUrl()
|
_instance.nextTaskUrl()
|
||||||
|
@ -153,8 +157,8 @@ class _taskManagerSingleton extends App.Controller
|
||||||
title: App.i18n.translateInline('Loading...')
|
title: App.i18n.translateInline('Loading...')
|
||||||
head: App.i18n.translateInline('Loading...')
|
head: App.i18n.translateInline('Loading...')
|
||||||
worker = App.TaskManager.worker(task.key)
|
worker = App.TaskManager.worker(task.key)
|
||||||
if worker
|
if worker && worker.meta
|
||||||
data = worker.meta()
|
data = worker.meta(task)
|
||||||
|
|
||||||
# apply meta data of controller
|
# apply meta data of controller
|
||||||
if data
|
if data
|
||||||
|
@ -180,6 +184,15 @@ class _taskManagerSingleton extends App.Controller
|
||||||
return @workers[ key ] if @workers[ key ]
|
return @workers[ key ] if @workers[ key ]
|
||||||
return
|
return
|
||||||
|
|
||||||
|
ensureWorker: (key, callback) =>
|
||||||
|
if worker = @worker(key)
|
||||||
|
callback(worker)
|
||||||
|
return
|
||||||
|
|
||||||
|
@one "TaskManager::#{key}::WorkerStarted", =>
|
||||||
|
@ensureWorker(key, callback)
|
||||||
|
true
|
||||||
|
|
||||||
execute: (params) ->
|
execute: (params) ->
|
||||||
@queue.push params
|
@queue.push params
|
||||||
@run()
|
@run()
|
||||||
|
@ -306,6 +319,7 @@ class _taskManagerSingleton extends App.Controller
|
||||||
# start controller if not already started
|
# start controller if not already started
|
||||||
if !@workers[params.key]
|
if !@workers[params.key]
|
||||||
@workers[params.key] = new App[params.controller](params_app)
|
@workers[params.key] = new App[params.controller](params_app)
|
||||||
|
App.Event.trigger "TaskManager::#{params.key}::WorkerStarted"
|
||||||
|
|
||||||
# if controller is started hidden, call hide of controller
|
# if controller is started hidden, call hide of controller
|
||||||
if !params.show
|
if !params.show
|
||||||
|
|
Loading…
Reference in a new issue