1

我有三种方法 loadMeta,loadDatarenderList

loadMeta将其结果传递给loadData. LoadData 使用元数据获取结果;

然后我需要从loadMetaand获取结果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 回答