1

、、、の3 つの方法 loadMetaloadDataありrenderListます。

loadMetaその結果を にパイプしloadDataます。LoadData はメタを使用して結果を取得します。

次に、 と から結果を取得し、両方を に渡す必要がloadMetaありloadDataますrenderList。しかし、両方の結果セットを取得する方法がわかりませんloadData

これは(基本的に)私がやろうとしていることです:

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

インラインで行うことは可能ですか、それともステートメントを分割する必要がありますか?

4

1 に答える 1

1

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);
});

これが一番わかりやすいかもしれません。

于 2012-09-14T12:24:11.347 に答える