Как передать данные из первого deferred.done в последующие
Как передать данные вниз по цепочке вызовов deferred без использования глобальных переменных?
function doSomthing() { var ajx = $.ajax(.....); ajx.done(function{ var data = calcAndTransformSomeData(); }); return ajx; }; var job = doSomthing().done((){ //тут мне необходимо получить data полученный в ajx.done в doSomthing var data = .... }); |
до конца по этому куску я не в ехал в смысл.
но из того что понял могу предложить следующее. 1) doSomthing - можно бы разместить в замыкании, в этом же замыкании вы могли бы хранить любую нужную вам информацию. А вообще у вас адовый код, сто пудово можно проще ))) 2) Можно по копать ещё в этом направлении. Код в качестве примера идеи. Не уверен что он на 100% рабочий, но суть задумки думаю поймёте. function doSomthing() { var ajx = $.ajax(.....); // прототип пользовательского обработчика ajx.edr=function(d){}; // метод устанавливающий пользовательский обработчик ajx.dataReady=function(f){ ajx.edr=f; } // обработчик ajax (если я правильно понял :) ) ajx.done(function{ var data = calcAndTransformSomeData(); // вызываем пользовательский обработчик ajx.edr(data); }); return ajx; }; var job = doSomthing().dataReady( function(data){ //здесь data нам передадут в качестве параметра, и с его получением заворачиваться не надо. // кроме прочего, метод в dataReady гарантированно будет вызван после calcAndTransformSomeData, а не до него. Что упрощает жизнь !! alert(data); console.log(data); }); |
Ну тут ничего адского - обыкновенные deferred объекты, просто их нужно уметь правильно готовить )))
проблема частично решается присваивание this свойства - оно появится в 3м параметре, либо самому deferred объекту, но к сожалению элегантного метода пока не нашел ( |
Часовой пояс GMT +3, время: 05:14. |