我有很多目前看起来像这样的功能:
function LoadFromURL(url)
{
var d = $.Deferred();
$.get(url).then(function(text)
{
LoadFromText(text).then(function(obj)
{
d.resolve(obj);
},
function(err)
{
d.reject(err);
});
},
function(err)
{
d.reject(err);
});
return d.promise();
}
这个函数接受一个 URL 并加载一个 Promise 中的文本。然后将文本传递给 LoadFromText 函数,该函数返回另一个承诺。如果成功,则外部延迟被解决。如果无法加载 URL,或者 LoadFromText 函数失败,则外部延迟被拒绝。
有没有一种方法可以链接解决/拒绝的结果并最终得到如下结果:
function LoadFromURL(url)
{
return $.get(url).then(function(text)
{
return LoadFromText(text);
},
function(err)
{
return $.Deferred().reject(err);
}).promise();
}
我已经看到了一些允许这样做的承诺的实现——在“then”中返回一个承诺,意味着使用了承诺的最终结果。
我意识到这目前不起作用(结果是承诺,而不是承诺的结果),但希望有人可以提出一种方法来完成这项工作,这样我就可以整理第一个示例中有时令人困惑的混乱.
我希望这是有道理的。谢谢。