2013-03-05 3 views
2

У меня есть 3 функции: func1, func2 и FUNC3.Выполняемые функции последовательно и параллельно

func1 и func2 использование load() для извлечения содержимого динамически.

FUNC3 работает на содержание загружается func2 и показывает анимацию на нем.

Я хочу FUNC1 и func2 запустить параллельно (для лучшей производительности), а затем я хочу FUNC3 бежать после того, как предыдущие два сделаны.

var funcList = ['func1','func2']; 
$.each(funcList, function(i,v){ 
     window[v](); 
}) 
func3(); 

Я заметил, что анимация FUNC3() оленья кожа перспективе, вероятно, сог содержание func2 Wasnt принес еще. Я запустил func3() с консоли после загрузки страницы и анимации. Почему это происходит? Isnt each() синхронно?

не
+2

Да, 'jQuery.each()' ** есть ** синхронным, но ваши две функции не являются. Он выполнит обе функции, а затем выполнит 'func3()', но так как у двух других есть вызовы AJAX, они не гарантируют выполнение обратных вызовов. –

ответ

0

это потому, что $.ajax асинхронные .. к тому времени func3 называются, нет никакой гарантии, что другой два Аякса вызова был завершен successfully..you можно использовать $.when проверить возвращаемое обещание и после того, как две функции разрешен запуск третьей функции.

попробовать этот

$.when(funcList).then(func3) 

пример

var func1=function(){ 
    return $.get('url',function(data){....}); 
} 

var func2=function(){ 
    return $.get('url2',function(data){....}); 
} 

function func3(){ 
    // animation here 
} 

$.when(func1(),func2()).then(func3) 
+0

Будет ли '$ .when (func1(), func2())' гарантировать, что 1 и 2 выполняются параллельно? – soundswaste

+0

да .. он работает параллельно ... $ .when предоставляет способ выполнения функций обратного вызова, основанных на одном или нескольких объектах, обычно отложенных объектах, представляющих асинхронные события ... так что если функции при успешном выполнении идут в ' затем '.. – bipen

+0

Эй, я не мог заставить ваш метод работать. Я сделал простую скрипку: http://jsfiddle.net/Y4PHM/1/ Не могли бы вы заглянуть в нее и заставить ее работать? – soundswaste

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