Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2013, 22:30
Новичок на форуме
Отправить личное сообщение для singaporian Посмотреть профиль Найти все сообщения от singaporian
 
Регистрация: 08.08.2013
Сообщений: 8

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

Вопросы:
1) Я понимаю, что пропустил какой-то глобальный момент и что-то понимаю не так как оно есть. Но что я пропустил?
2) Если callback вызывается всегда в конце, то какой смысл, что его все равно во всех примерах руками прописывают? И если его надо прописывать, чем он тогда отличается от любой другой переданной в аргумент функции?
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2013, 23:23
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

http://javascript.ru/ajax/intro#sinh...hronnaya-model
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2013, 00:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

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

Впрочем по ссылке nerv_'а все уже разжевано.
Ответить с цитированием
  #4 (permalink)  
Старый 14.08.2013, 00:42
Новичок на форуме
Отправить личное сообщение для singaporian Посмотреть профиль Найти все сообщения от singaporian
 
Регистрация: 08.08.2013
Сообщений: 8

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

Но все равно спасибо за ответ.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Как сделать так чтобы ajax возвращал результат? Rooner AJAX и COMET 7 28.06.2013 12:42
Как сделать что бы при регистрации человека на моем сайте у него не появлялось... drunkwolfs Общие вопросы Javascript 2 07.08.2012 10:58
jQuery не так работает на сервере dial jQuery 2 19.11.2009 15:19
Драгабл работает не так как надо valek1989 jQuery 0 16.11.2009 18:09