2013-03-10 4 views
1

Ищу аккуратнее способ сделать это:

var f1 = function(){}; 
    var f2 = function(){}; 
    doSomething('ArbritraryString',f1); //does xhr, and then runs f1 on callback 
    doSomething('ArbritraryString',f2); //does xhr, and then runs f2 on callback 

    $.when($.get('myJson',f1,f2)).then(function(ret1, ret2, ret3){ 

     //doStuff 
    }); 

Есть идеи?

функция doSomething буквально вызывает функции пустой f1/f2 поэтому у меня есть обработчик обратного вызова для $.when атм ....

в идеале я хотел бы

$.when($.get('myJson',doSomething('ArbritraryString',function(){}); ,doSomething('ArbritraryString',function(){}))).then(function(ret1, ret2, ret3){ 

    //doStuff 
}); 

и JQuery волшебно знать, что второй параметр в doSomething - это обратный вызов, на который он должен следить.

doSomething выглядит следующим образом:

doSomething:function(name,callbackFunction){ 
    /*snip logic 

    */ 
    $.get(name, function(data){ 
      /*some more logic 


      */ 

      if(typeof(callbackFunction)==='function'){ 
       callbackFunction(); 
      } 
     }); 
    } 
}, 
+1

Какая часть этого вы хотите быть «опрятным»? – Matt

+4

Что вы на самом деле пытаетесь сделать? –

+0

Его xhr, который загружает скрипт, а затем $ .When потом. Я пытаюсь понять, как я могу переписать это, поэтому мне не нужно объявлять 2 пустых функции вне параметра функции. – Alex

ответ

2

Изменение doSomething поэтому не принимает обратный вызов и просто возвращает объект jqXHR (конец с return $.get), то вы можете использовать $.when правильно отслеживать ход всех jqXHR объекты:

$.when(
     doSomething('ArbritraryString'), 
     doSomething('ArbritraryString'), 
     $.get('myJson') 
    ).done(function(ret1, ret2, ret3){ 
     // all three succeeded 
    }); 

Если doSomething потребности сделать некоторые дополнительные обработки какой-то прежде, чем это следует считать решен, то эта функция должна создать свой собственный объект «Отложенный» и вернуть значение этого объекта .promise() вместо прямого возврата $.get. Подробнее об этом подходе см. В примере на deferred.promise().

Смежные вопросы