Jquery Piping多个结果

时间:2012-09-14 11:55:49

标签: javascript jquery jquery-deferred

我有三种方法 loadMetaloadDatarenderList

loadMeta将其结果传递给loadData。 LoadData使用meta来获取结果;

然后我需要从loadMetaloadData获取结果并将它们都传递给renderList。但我不知道如何得到这两组结果,我最终得到了loadData的结果。

这是(基本上)我正在尝试做的事情:

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

是可以内联进行还是我需要打破语句?

1 个答案:

答案 0 :(得分: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);
});

这可能是最容易理解的。