我有很多的,目前像這樣的功能:鏈接deferreds
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,並加載一個承諾中的文本。該文本然後傳遞給LoadFromText函數,該函數返回另一個承諾。如果成功,則外部延遲已解決。如果URL無法加載,或者LoadFromText函數失敗,則外部延遲被拒絕。
有沒有我可以鏈上的決心/拒絕的結果,像這樣的東西最後一個方法:
function LoadFromURL(url)
{
return $.get(url).then(function(text)
{
return LoadFromText(text);
},
function(err)
{
return $.Deferred().reject(err);
}).promise();
}
我見過的承諾的一些實現,使這 - 回內的承諾'那麼'意味着使用承諾的最終結果。
我意識到此時此刻不起作用(其結果是諾言,而不是承諾的結果),但希望有人可以提出一種方法來完成這項工作,以便我可以收拾有時令人困惑的混亂第一個例子。
我希望這是有道理的。謝謝。
jQuery的Deferred's'then'方法與我用過的其他許諾庫有點不同。它更多用作過濾器。 (但是,當然,你可以用它來做任何你想要的。)看看'.when()'來代替。如果這不符合你的要求,你的第一個代碼塊看起來就像我會解決這個問題的方式。或者,包括Async.js或其他東西。 – Brad