Насколько я знаю, утверждения Ллойда верны, но я не думаю, что это был именно тот ответ, который вы искали, вот моя попытка:
Прежде всего, при работе с отложенными обещаниями единственно разумныевещь, которую можно ожидать и предоставить в качестве возвращаемого значения, является объектом обещания (следовательно, почему Ллойд указывает вам на CPS).
Где бы вы обычно делали что-то вроде
/* Have some kind of callback for when ajax is done */
var myCompleteCallback = function(data){
// whatever you want to do with your ajax call results
}
var myErrorCallback = function(){
// handle the ajax error
}
/* Send the actual ajax request, and tell it to call MyCompleteCallback afterwards */
$.ajax({
url: '/foo/bar.xml'
data: {},
success: myCompleteCallback,
error:
});
Вы хотели бы сделать это в реализации с отложенным стилем:
/* Have some kind of callback for when promise is resolved is done */
var myCompleteCallback = function(data){
// whatever you want to do with your ajax call results
}
var myErrorCallback = function(){
// handle the ajax error
}
/* you could also do ajax.done().fail() but i think this reads better as an example */
var getsomething = $.ajax({ url: '/foo/bar.xml', data: {} });
getsomething.then( myCompleteCallback, myErrorCallback )
Таккак видите, в этом нет ничего особенного и особенного, кроме случаев, когда вы начинаете разбираться с более сложными примерами.
Что тут крутого (следуя из предыдущего примера) ...
var getVisitorInfo = function(){
/* stash the user information ajax call promise */
var fetchUserInfo = $.ajax({url:"/some/api/user.json"})
/* stash the account information ajax call promise */
var fetchAccountInfo = $.ajax({url:"/some/api/user.json"})
/* trigger both calls and returns a promise that will resolve to both results */
return $.when( fetchUserInfo, fetchAccountInfo )
}
/* Usage: */
getVisitorInfo().done(function(userJSON, accountJSON){
// manipulate your data/ui/and whatnot
}).fail(function(failure1,failure2){
// redirect to login or whatever
})
Надеюсь, это поможет.Я бы посоветовал взглянуть на различные реализации отложенных / обещанных, чтобы лучше понять все это.Что ДЕЙСТВИТЕЛЬНО помогло мне, так это игра с библиотекой Криса Ковала Q (и отличного качества README, которую он предоставляет) и чтение об этом в CommonJS wiki .И Крис также дал доклад на эту тему еще в 2010 году