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
|
||||
)
|
||||
|
||||
one: (event, callback) =>
|
||||
App.Event.bind(
|
||||
event
|
||||
callback
|
||||
@controllerId
|
||||
true
|
||||
)
|
||||
|
||||
unbind: (event, callback) =>
|
||||
App.Event.unbind(
|
||||
event
|
||||
|
|
|
@ -59,6 +59,10 @@ class App.TaskManager
|
|||
return if !_instance
|
||||
_instance.worker(key)
|
||||
|
||||
@ensureWorker: (key, callback) ->
|
||||
return if !_instance
|
||||
_instance.ensureWorker(key, callback)
|
||||
|
||||
@nextTaskUrl: ->
|
||||
return if !_instance
|
||||
_instance.nextTaskUrl()
|
||||
|
@ -153,8 +157,8 @@ class _taskManagerSingleton extends App.Controller
|
|||
title: App.i18n.translateInline('Loading...')
|
||||
head: App.i18n.translateInline('Loading...')
|
||||
worker = App.TaskManager.worker(task.key)
|
||||
if worker
|
||||
data = worker.meta()
|
||||
if worker && worker.meta
|
||||
data = worker.meta(task)
|
||||
|
||||
# apply meta data of controller
|
||||
if data
|
||||
|
@ -180,6 +184,15 @@ class _taskManagerSingleton extends App.Controller
|
|||
return @workers[ key ] if @workers[ key ]
|
||||
return
|
||||
|
||||
ensureWorker: (key, callback) =>
|
||||
if worker = @worker(key)
|
||||
callback(worker)
|
||||
return
|
||||
|
||||
@one "TaskManager::#{key}::WorkerStarted", =>
|
||||
@ensureWorker(key, callback)
|
||||
true
|
||||
|
||||
execute: (params) ->
|
||||
@queue.push params
|
||||
@run()
|
||||
|
@ -306,6 +319,7 @@ class _taskManagerSingleton extends App.Controller
|
|||
# start controller if not already started
|
||||
if !@workers[params.key]
|
||||
@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 !params.show
|
||||
|
|
Loading…
Reference in a new issue