我有三种方法
loadMetaloadDatarenderList

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

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

(基本上)这是我想要做的:

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


是否可以内联进行或需要将语句分解?

最佳答案

如果您的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签名的resolve回调中:

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


这可能是最容易理解的。

10-05 20:41
查看更多