2012-09-14 23 views
1

我有三個方法 loadMetaloadDatarenderListjQuery的管道的多個結果

loadMeta管其結果爲loadData。 LoadData使用元來獲得它的結果;

然後我需要從loadMetaloadData得到結果,並將它們傳遞給renderList。但是我不知道如何得到兩套結果,我最終得到的結果是loadData

這(基本上)我想要做的事:

$.when(loadMeta().pipe(loadData)).then(function(){ renderList(metaResult, dataResult); }); 

是有可能做到這一點inline或做我需要打破報表嗎?

+0

您正在使用哪個版本的jQuery?在最近的版本中''pipe'只是'then'的一個非標準別名 – Bergi

+0

我使用的是1.7.2(我必須承認我努力區分當時和管道) – JonWells

回答

1

如果你的loadData函數返回兩個結果,這將是最簡單的。

一個簡單的功能,讓結果是含兩個結果將需要額外thenpipe)對象:

loadMeta().then(function(metaResult) { 
    return loadData(metaResult).then(function(dataResult) { 
     return {meta:metaResult, data:dataResult}; 
    }); 
}).done(function(result) { 
    renderList(result.meta, result.data); 
}); 

或者,您將它們合併到只爲renderList正確的簽名下決心回調:

loadMeta().then(function(metaResult) { 
    return loadData(metaResult).then(function(dataResult) { 
     return new $.Deferred().resolve(metaResult, dataResult); 
    }); 
}).done(renderList); 

或者,如你所說,我們有可能打破的發言,並添加一個額外的回調緩存metaResult

var metaResult; 
loadMeta().done(function(result) { 
    metaResult = result; 
}).then(loadData).done(function(dataResult) { 
    renderList(metaResult, dataResult); 
}); 

這可能是最容易理解的。