2

我有两个(加载缓慢)数据源。我可以在加载数据源 2 后立即开始处理它,但需要来自 1 和 2 的数据才能处理来自源 1 的数据。所以我有一些这样的代码:

$.get 'url2', (data2) ->
    $.get 'url1', (data1) ->
        # do stuff with data1 and data2
    # do stuff with data2

但是,我想并行加载它们,而不是顺序加载(即我不想在开始加载数据源 1 之前等待数据源 2 加载)。

有什么好的设计模式可以做到这一点吗?

4

2 回答 2

7
var one = $.get 'url1'
var two = $.get 'url2'
$.when(one, two).then #both
$.when(two).then #just two

使用$.whenjQuery 1.5 中的新功能。

在这里你同时加载它们。并使用返回的“承诺”$.get在准备就绪后运行某些功能。

于 2011-03-03T18:56:46.933 回答
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
于 2011-03-03T18:50:01.923 回答