Есть функция, которая отправляет некоторое сообщение на сервер, после успешной обработки сервер возвращает некий номер, который присваивается следующему сообщению при вызове этой функции. Проблема была следующей: при многократном вызове этой самой функции сообщения отправлялись сразу, сервер принимал и делал проверку номера, если номер сообщения не равен сохраненному номеру сервером то выдавал ошибку. А оно так и получалось, после отправки сообщения сервер не успевал вернуть текущий номер клиенту чтоб присвоить этот номер для следующего сообщения, следующее сообщение отправлялось сразу без нового номера, для решения этой проблемы было решено сделать очереди с использованием Deferred объекта
есть функция инициализации
initialize: function () {
this.message_ids = [];
this.message_ready = $.when();
}
и функция отправки
send: function(message){
var self = this;
this.message_ids = this.message_ids.concat(message);
this.message_ready = this.message_ready.then(function(){
var msg = _.uniq(self.message_ids.splice(0));
return self.send_to_server(msg).then(function (number) {
self.new_message_number = number;
}).fail(function () {
self.message_ids = self.message_ids.concat(msg);
});
});
}
});
return this.message_ready;
},
данная функция делает следующее: при каждом вызове функции сообщение message добавляется в очередь, и каждое сообщение отправляется когда message_ready срабатывает done, если сработало fail у send_to_server то данное сообщение обратно добавляется в очередь и при следующих вызовах всегда будет fail у message_ready. То есть я больше не смогу отправлять сообщение, как можно это все исправить?
P.s. извиняюсь за объем текста, хотел более понятно объяснить что я хочу.
UPD:
добавляю для then обработчик в случае fail
function(){
var next = $.Deferred();
this.message_ready = next;
next.resolve();
return next.resolve();
}
и переприсваиваю, работает в принципе норм, но что то мне подсказывает что так тоже не правильно