我有三种方法
loadMeta
,loadData
和renderList
。
loadMeta
将其结果传递给loadData
。 LoadData使用meta来获取结果;
然后我需要从loadMeta
和loadData
获取结果并将它们都传递给renderList
。但我不知道如何得到这两组结果,我最终得到了loadData
的结果。
这是(基本上)我正在尝试做的事情:
$.when(loadMeta().pipe(loadData)).then(function(){ renderList(metaResult, dataResult); } );
是可以内联进行还是我需要打破语句?
答案 0 :(得分: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);
});
这可能是最容易理解的。