我有两个(慢速加载)数据源。我可以在加载后立即开始处理数据源2,但是需要来自1和2的数据来处理来自源1的数据。所以我有一些这样的代码:
$.get 'url2', (data2) ->
$.get 'url1', (data1) ->
# do stuff with data1 and data2
# do stuff with data2
但是,我希望并行加载它们,而不是顺序加载它们(即我不想在开始加载数据源1之前等待加载数据源2)。
有没有好的设计模式可以做到这一点?
答案 0 :(得分:7)
var one = $.get 'url1'
var two = $.get 'url2'
$.when(one, two).then #both
$.when(two).then #just two
使用jQuery 1.5中的新$.when
。
在这里你可以并行加载它们。并使用$.get
返回的“promises”在准备就绪后运行某些功能。
答案 1 :(得分:0)
创建一个像这样的辅助类:
class DeferredExecution
getExecuteFunc: ->
(x...) =>
if !@onExecFunc
@args = x
else
@onExecFunc x...
onExecute: (func) ->
@onExecFunc = func
if @args
@onExecFunc @args...
@args = null
然后你可以做到:
deferredFunc = new DeferredExecution()
$.get 'url1', deferredFunc.getExecuteFunc()
$.get 'url2', (data2) ->
deferredFunc.onExecute (data1) -> # gets executed only after we get the data from url1
# do stuff with data1 and data2
# do stuff with data2