|
|
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста что-то никак не могу разобраться, JavaScript, есть асинхронная функция, которая выполняет какие-то действия, есть массив элементов, как пустить цикл по элементам, чтобы был синхронный, чтобы обработка нового элемента не начиналась, пока не обработается предыдущий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 11:56 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
без кода это пустой набор слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:07 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
BoksyПодскажите пожалуйста что-то никак не могу разобраться, JavaScript, есть асинхронная функция, которая выполняет какие-то действия, есть массив элементов, как пустить цикл по элементам, чтобы был синхронный, чтобы обработка нового элемента не начиналась, пока не обработается предыдущий из колбэка вызывать функцию для следующего эелемента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:19 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Boksy, JS-код сам по себе асинхронный (callback - функции это один из китов JavaScript), и JavaScript - это однопоточное приложение (если не используются воркеры). Если обработка очередного элемента массива слишком тяжела, что приходится разносить операции по шагам (или использовать воркеры), или данные приходят через AJAX-запросы, то обработчики событий плюс callback-функции решают задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:29 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. примерная структура. попробую пояснить 1) вызывется функция start(), в ней необходимо поочередно пробежаться по элементам и вызвать для каждого actionOnData (если использовать колбеки то работает, но можно ли сделать это в цикле, просто неизвестно число элементов?) 2) данные передаются в actionOnData, там обрабатываются данный и грузятся часть данных 3) поподаем в actionOnData2, там догружаются данные гружаются в зависимости от флага(для упращение примера флаг сразу false), в случае flag = false; вызываем actionOnData2 с другим флагом (ту синхронность теряется и совместно с текущим элементов, начинает выполняться следующий элемент) Надеюсь хоть как-то понятно Вопросы в следующем, как сделать цикл (чтобы можно было обработывать динамическое кол-во), и как не терять синхронность в пункте 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:56 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Boksy, Брэд какой-та )) Если обработка одного элемента состоит из нескольких асинхронных (отложенных) вызовов функций, а элементы надо обработать строго последовательно, то после вызова последней функции обработки нынешнего элемента достаточно добавить отложенный вызов основной функции для следующего элемента. тогда цепочка вызовов будет выглядеть так: Основная функция для элемента 1 --Обработчик1 --Обработчик2 --Обработчик3 --Регистрация отложенного вызова основной функции для элемента 2 Основная функция для элемента 2 --Обработчик1 --Обработчик2 --Обработчик3 --Регистрация отложенного вызова основной функции для элемента 3 ... P.S. Регистрация отложенного вызова осуществляется командой setTimeout(func, 0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 13:39 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
есть массив элементов, как пустить цикл по элементам, чтобы был синхронный, чтобы обработка нового элемента не начиналась, пока не обработается предыдущий может не так понял, но если имелось ввиду последовательная обработка массива асинхронными функциями, то примерно так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2016, 14:49 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Доброе время суток, У меня похожий вопрос, поэтому не стал создавать новую тему. Начну с кодов: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. Мне надо чтобы строка Код: javascript 1. выполнилась после завершения выполнения этих строк: Код: javascript 1. 2. Я попробовал так, но результат отрицательный. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Подскажите пожалуйста, как организовать поочередное выполнение функций ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 11:10 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Gabit, я делал через рекурсию, примерно как здесь http://savvateev.org/blog/30/ На эту статью вышел через гугл javascript последовательно аякс по очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 13:07 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
GabitМне надо чтобы строка Код: javascript 1. выполнилась после завершения выполнения этих строк: Код: javascript 1. 2. Она так и выполнится... Но тебе видать нужно выполнить ее после получения обоих ответов на запросы. А это уже другое дело! Как вариант: - завести счетчик в котором будет увеличиваться число ответов на запросы - при получении ответа увеличивать счетчик на единицу - после запуска запросов запустить setTimeout(), который будет проверять тот счетчик - если количество ответов устраивает, выполнить переход - если мало, продолжить ожидание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 13:31 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
user89я делал через рекурсию Рекурсия при разнопоточных событиях не помощник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 13:33 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
user89я делал через рекурсию, примерно как здесь http://savvateev.org/blog/30/ авторрекурсивно, через callback функцию У людей какое-то странное понимание рекурсии. Вот несколько определений рекурсии автор Реку́рсия — определение, описание, изображение какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Термин «рекурсия» используется в различных специальных областях знаний — от лингвистики до логики, но наиболее широкое применение находит в математике и информатике. https://ru.wikipedia.org/wiki/Рекурсия авторЧастный случай подвызова – когда функция вызывает сама себя. Это называется рекурсией . https://learn.javascript.ru/recursion По твоей ссылке нет никакого вызова самой себя. Есть простая передача себя в калбек другой функции для асинхронного вызова. Т.е. сама функция уже отработала, стек уменьшился. Т.о. никакой рекурсии нет и в помине. В том примере запросы выполняются по очереди. У автора они запущены одновременно. Т.е. пример не корректен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 13:41 |
|
||
|
JavaScript синхронность/асинхронность
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял то подойдёт обычноt^ Код: javascript 1. Сам никогда так не делал, но в документации написано что сработает. Только не забудьте из crOb вернуть ajax объекты. То есть перед $.ajax... поставить return и всё такое... И Вы сильно усложнили структуру... разные там deferred и resolve в данном случае лишние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39524832&tid=1444459]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 338ms |
| total: | 490ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...