Коллеги, расскажите плиз на пальцах, как сия штука работает?
Что отправляем из js, что получаем в пыхе.
Смотрю здесь изучаю сам класс, но все-равно присутствует некоторое непонимание =( А пользовать надо, т.к. есть задачи, которые не вписываются в стандартные 30 сек =(
В js крутится опрашивалка статуса. при старте она получает уникальный номер задачи и каждые 5 (или сколько там настроишь setTimeout) секунд генерит запрос состояния с этим самым номером. Как только поллучает сигнал о том, что все выполнено, показывает статистику и перестает генерить запросы.
У waLAC есть несколько обязательных методов. Пишу по памяти, могу что-то упустить.
т.е. init-step-step-step-finish
чтобы сохранять данные между запусками у контроллера есть свойство data. Туда складываешь все, что нужно, чтобы хранилось :) номер строчки, на которой остановилась обработка csv, количество товаров, уже выгруженных в yml... Все, что туда складывается должно уметь сериализоваться -- т.е. если ты туда свой объект складываешь, он должен реализовывать интерфейс соответствующий (для простых типов это не нужно, оно само умеет). Соответственно в контроллере есть два метода, которые сериализуют и десереиализуют все это.
Ну вот так вот в общих чертах. Там есть еще всякие нюансы, например контроллер умеет сообщать, что эта задача сейчас выполняется --- в штатных js-скриптах крутится 2 цикла опроса. Один запускается реже -- он ждет выполнения очередного step, второй чаще -- он просто опрашивает состояние и обновляет прогрессбар. Но можно обойтись и одним циклом, не заморачиваясь.
Все верно Сергей написал. Но понять, имхо, проще на примере. Я изучал то ли на перестройке поисковых индексов, то ли на перегенерации эскизов изображений. По-моему, на эскизах все же проще.
Спасибо, ребята ... буду изучать =))
Самый сложнопонимаемый контроллер из всех. Чтобы разобраться я сначала выпилил из него stage. Стало гораздо проще.
Спасибо Сергею Родовниченко за терпеливое разъяснение.
Кажется разобрался слегка.
Только вот не совсем понял, почему первый ответ от контроллера приходит только через 12 секунд, хотя опрашиваю каждые 2 секунды (для тестов)?
Ну навскидку:
Если ты через setTimeout то там такая петрушка:
ждем 2 сек → делаем запрос → ждем ответа → ждем 2 сек → делаем запрос...
там же следующий setTimeout генерится при получении ответа от $.ajax ($.get/$.post)... :)
поэтому webasyst в своих плагинах импорта делает 2 цикла. если первый ждет ответа, второй просто получает статистику. и наоборот, если случилось так, что второй сделал запрос и ждет, то тогда первый просто получает ответ "все работает, обработано столько-то"
но я бы на начальном этапе не стал вот эту конструкцию воспроизводить. разберись сначала, как работает самая простая минимально-рабочая конфигурация
Павел таки прав. За один шаг действительно обрабатывается весь массив.
Но я все-равно не понимаю. Я же опрашиваю каждые 2 секунды, а шаг исполняется за 12.
Т.е. получается действительно надо крутить два цикла, как предлагает Сергей?