loadData
関数が両方の結果を返すのが最も簡単です。
結果を両方の結果を含むオブジェクトにする単純な関数には、追加のthen
( pipe
)が必要です。
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);
});
これが一番わかりやすいかもしれません。