如果您的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);
});
这可能是最容易理解的。