Я использую Backbone.js, и у меня есть несколько событий, которые создают параметры для объекта Options, которые встречаются в моем маршрутизаторе. Представление, которое вызвано, нуждается в этих объектах, и поэтому они должны завершиться до создания представления. Проблема состоит в том, что эти события, которые происходят, являются ajax и являются асинхронными, поэтому они не заполняются до отображения представления. Я попытался сделать события синхронными, но это вызывает другие выпуски, например, замораживание gui. Итак, я пытаюсь связать свои функции так, чтобы представление создавалось до тех пор, пока не будут вызваны все функции. Но это не работает для меня, поскольку я не могу понять, как передавать данные между отсроченными вызовами. Вот что у меня есть:JQuery обещание и отложенное с возвращенными результатами
Router.js:
someParentFunction:function(paramA, paramB){
var that = this;
var defer1 = $.when(
$.get(that.functionA('somedata1','somedata2',that))
);
defer1.done(function() {
var defer2 = $.when(
$.get(that.functionB('someData',that))
);
defer2.done(function (data) {
var defer3 = $.when(
$.get(that.functionC('somedata1',that))
);
defer3.done(function (data) {
//how do I get the results from each Deferred function?
//keeling in mind that each deferred function
//also receives parameters.
//also, the order of the other functions does not matter,
//as long as they all return their values before this
//view is created.
that.view = new ProjectView({
someParam1:paramA,
someParam2:paramB,
resultsA: jQuery.parseJSON(defer1.results),
resultsB: jQuery.parseJSON(defer2.results),
resultsC: jQuery.parseJSON(defer3.results),
}),
window.app.page(that.view, {
tab:'someName',
})
});
});
});
}
functionA: function(param1, param2){
var url = '?q=somestring&' + param1 + '&' + param2 ;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
functionB: function(param1, context){
var url = '?q=somestring&' + param1 ;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
functionC: function(param1, context){
var url = '?q=somestring&' + param1;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
Проверьте функции 'functionX'. Все они имеют одинаковую синтаксическую ошибку. – Andreas
нет необходимости обертывать один '$ .ajax' в' $ .when'. Просто добавление дополнительного кода. '$ .ajax' уже возвращает обещание – charlietfl
Вышеприведенный код - это просто псевдокод – jason