2015-05-12 4 views
0

я в настоящее время имеют одну яваскрипта функцию - в простых терминах это делает 3 задачи:Javascript setTimeOut - это асинхронно во вложенной функции?

Задача A Задача B Задача C

Эти 3 задачи resusable в своем собственном праве, так что мои мысли разделить функция, как это:

$(".sel").click(function (e) { 

    functionA(e); 
    functionB(e); 
    functionC(e); 
}); 

Однако основная функция содержит функцию SetTimeout которая останавливает событие щелчка, а затем перенаправляет ссылку после того, как все остальное закончил (только половина второй задержки). Вопрос, который у меня есть, заключается в том, что если я отрисую этот код и поместил его в функцию sayA, это остановит функционирование функции B до тех пор, пока не закончится ожидание или не начнут работать B и C?

Заранее спасибо.

+2

Какая функция _main_? – Zee

+0

Можете ли вы создать jsfiddle для нас? –

+0

Функция B и C будет работать прямо вперед – syms

ответ

0

В javascript нет «занятого ожидания», выполнение будет продолжаться после вызова setTimeout, а функции B и C будут выполняться в порядке (предполагая, что ваша функция A является основной функцией, которую вы упомянули). Когда они закончили свои операции и таймаут вверх, выполнение будет переходить к отсроченной функции, которую вы передаваемая функция А.

Для описания этих общих понятий, эта статью MDN на JavaScript в concurrency model and event loop.

+0

Извините, просто я поняла - это A (подождите), B, C - продолжить или A, B, C ждать завершения - продолжить? –

+0

Второй случай. * Ожидание *, по сути, на самом деле не является активностью (в отличие от A, B или C), это просто задержка перед каким-то другим видом деятельности. Во время этого (ожидание) может произойти любое другое действие, но никакая другая деятельность не может произойти, например, во время B. Не уверен, что это понятно. – doldt

+0

Это здорово, что я могу сделать то, что мне нужно, чтобы сделать более эффективным. Спасибо за помощь. –

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