2014-10-29 3 views
0

У меня есть следующая цель:Как правильно выполнить обратный вызов в определенных условиях?

Я хочу иметь две функции - Start() и End(). Первая функция запускается при запуске MyFunc(), вторая запускается в конце MyFunc(). И End() не должен запускаться, пока Start() не завершен.

Теперь я написал следующий код:

function MyFunc(OnMyFuncReady) { 
    Start(); 
    // do something 
    OnMyFuncReady(); 
} 

function Start() { 
    // start specific actions 
} 

function End() { 
    // end specific actions 
} 

MyFunc(function() { 
    End(); 
}); 

Но Start() работает асинхронно по отношению к End(). Как я могу решить проблему?

Update1: проверить порядок функций, бегущих и обнаружит, что все в порядке, но в Start() Я использую JQuery анимации функции, которые выполняются асинхронно ...

UPDATE2: Теперь у меня есть следующая проблема: Я хочу запустить End(), когда Start() (где используется jQuery animate()) и MyFunc(). И то и другое. Трудная задача для меня.

+1

Если 'Start' является асинхронным, тогда вам нужно будет использовать механизм обратного вызова также –

+0

Извините, это моя ошибка, я исправлю это. – AlexAstanin

+0

Мне нужен бег в следующем порядке: MyFunc() -> Start() -> End(); – AlexAstanin

ответ

1

Пути, как я их вижу два:

первым, чтобы ждать, пока вы не получите никакого ответа от Start(), а затем продолжить. Как только все будет закончено, пропустите функцию конца в качестве параметра. К сожалению, вы должны как-то отделить Bashviour от Start/End. Причина этого в том, что вам нужно проверить, закончилось ли начало. Эта проблема, которую вы не должны иметь с функцией End (release).

Второй способ - создать переменную со значением. После того, как вы назначили Start, вы узнаете, что происходит. Однако, если ваш старт потерпит неудачу, вы, вероятно, не захотите продолжать. После того как старт сделан, присвойте этому значению значение null. После этого вы должны проверить его на NULL и передать в конце функцию release.

Хорошим примером этого является Стэнфордский курс Джерри Каин, смотрите здесь: https://www.youtube.com/watch?v=Yr1YnOVG-4g&feature=PlayList&p=9D558D49CA734A02&index=6

Я надеюсь, что я помог тебе. Приветствуйте и думайте также синхронно, если у вас есть зависимости и ресурсы.

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