我有三种方法loadMeta
,loadData
和renderList
。loadMeta
将其结果传递给loadData
。 LoadData使用元数据获取结果。
然后,我需要从loadMeta
和loadData
获取结果,并将它们都传递给renderList
。但是我不知道如何获得两组结果,我只是得到了来自loadData
的结果。
(基本上)这是我想要做的:
$.when(loadMeta().pipe(loadData)).then(function(){ renderList(metaResult, dataResult); } );
是否可以内联进行或需要将语句分解?
最佳答案
如果您的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
签名的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);
});
这可能是最容易理解的。