Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Callback работает не так как я от него жду (https://javascript.ru/forum/misc/40646-callback-rabotaet-ne-tak-kak-ya-ot-nego-zhdu.html)

singaporian 13.08.2013 22:30

Callback работает не так как я от него жду
 
Вопрос теоретический, без кода.
Прочитал про callback, даже попробовал - все работает. Но я не понимаю его суть.
Допустим у меня выполняется сложная функция, внутри которой есть асинхронный вызов request. Мне надо приостановить функцию до момента завершения request, потому что последующий код зависит от результатов request. Я прочитал, что решение - callback. Но callback то внутри request'а. Да, он вызовется по завершению request'а, но к тому моменту функция уже отломается без необходимых данных, которые request дожен был поставить.

Вопросы:
1) Я понимаю, что пропустил какой-то глобальный момент и что-то понимаю не так как оно есть. Но что я пропустил?
2) Если callback вызывается всегда в конце, то какой смысл, что его все равно во всех примерах руками прописывают? И если его надо прописывать, чем он тогда отличается от любой другой переданной в аргумент функции?

nerv_ 13.08.2013 23:23

http://javascript.ru/ajax/intro#sinh...hronnaya-model

danik.js 14.08.2013 00:00

Цитата:

Сообщение от singaporian
но к тому моменту функция уже отломается без необходимых данных, которые request дожен был поставить.

Request не может поставить данные сразу, ибо на обращение к серверу требуется много времени. Ты предлагаешь блокировать поток (а это вызовет блокировку UI) на все это время? Тогда пожалуйста - выставляй async = true и радуйся фризам пользовательсокого интерфейса.

Те же, кого не устраивает такой расклад, скажут так: ты, запрос работай себе сколько нужно, мне ждать тебя некогда, у меня другие дела есть. А когда отработаешь - дай знать. Вот тебе callback-функция, позовешь когда будешь готов со своими данными.

Впрочем по ссылке nerv_'а все уже разжевано.

singaporian 14.08.2013 00:42

Нет, я не это спрашивал. Мне очевидны перимущества асинхронности и я уже про них читал. Мне были не очевидны принципы работы коллбэка. Но я уже у товарища спросил, оказывается звено, которое я потерял - было EventEmitter. После того как я про него прочитал, все встало на свои места.

Но все равно спасибо за ответ.


Часовой пояс GMT +3, время: 00:17.