|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть метод, который: 1) Записывает значение в текстовое поле на HTML-странице Код: javascript 1.
2) Выполняет синхронный вызов другого метода через JQuery.Ajax: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Проблема в том, что метод из Шага 2 выполняется первее чем метод из шага 1 . И в итоге, я сначала жду 3-4 секунды когда выполнится метод (шаг2), а потом вижу отрисовку "Пожалуйста, подождите..." Асинхронным шаг 2 сделать не могу, т.к. данные из вызывающей процедуры будут получены не своевременно, а мне нужно гарантированно их там получить. Подскажите, как можно сначала гарантированно заполнить поле, а потом вызвать синхронный метод? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 14:56 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Можно как-то так: Код: javascript 1. 2. 3. 4. 5.
Но это говнокод, и так делать нельзя. Завтра отменять синхронный ajax, и все ухищрения пойдут лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:06 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Alexander A. Sak Но это говнокод и он не работает. Я уже пробовал такой вариант. Блок внутри setTimeout начинает выполняться, происходит выход из функции, получаю пустой результат (т.к. метод только начал выполняться). Пустой результат возвращается в вызывающую процедуру, а тем временем синхронный метод закончил отработку, вернув нужный результат в никуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:11 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
А если таймаут увеличить до заметных 5-10 секунд. Все равно "подождите..." появляется после завершения ajax? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:42 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Наверное, проблема в обработчике success, где делается s = response.d; , которое к тому моменту не нужно. Обломс-с. Но можно только замазать проблему синтаксисом async/await. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:46 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
MAULER и он не работает Это ты им не правильно пользуешься... MAULER Я уже пробовал такой вариант. Блок внутри setTimeout начинает выполняться, происходит выход из функции, получаю пустой результат (т.к. метод только начал выполняться). Пустой результат возвращается в вызывающую процедуру, а тем временем синхронный метод закончил отработку, вернув нужный результат в никуда. Все это, тобой описанное, нужно делать в том setTimeout()... Тогда все будет возвращаться туда, куда нужно. Ты показал всего 2 куска - тебе Alexander A. Sak про них и написал. Далее ты сам должен был правильно понимать как работает setTimeout() и "достать" то, что ты от нас утаил... В следующий раз делай полные тестовые примеры - на них тебе можно будет показать работающие варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:46 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Если "код 2" делается гарантированно долго - можно вот это MAULER Код: javascript 1.
Поместить в setTimeout() до выполнения "кода 2"... Т.е. нужно разделять потоки. Вывод и рассчет должны выполняться в разных потоках. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 15:49 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
krvsa Если "код 2" делается гарантированно долго - можно вот это MAULER Код: javascript 1.
Поместить в setTimeout() до выполнения "кода 2"... Т.е. нужно разделять потоки. Вывод и рассчет должны выполняться в разных потоках. Я так и сделал. Ни с паузой 5 сек. ни с нулевой - нет нужного эффекта. Я могу ошибаться, но судя по всему setTimeout врубает асинхрон, в котором моя s не успев получить значение от AJAX-а вылетает из функции сообщает "пустышку" вызывающей процедуре. А когда значение от AJAX-а получено - отрисовывает "Пожалуйста, подождите" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 07:04 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Alexander A. Sak Наверное, проблема в обработчике success, где делается s = response.d; , которое к тому моменту не нужно. Обломс-с. Но можно только замазать проблему синтаксисом async/await. а это как? Подскажите? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 07:12 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
MAULER, А если сделать две отдельные функции и вызвать в одну ? Код: javascript 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 09:06 |
|
JavaScript: Порядок выполнения методов при синхронном вызове.
|
|||
---|---|---|---|
#18+
Привет всем! Короче выкрутился и сделал проще: Шаг 1) и Шаг 2) оставил без изменений, НО! $.ajax метод сделал асинхронным (async: true), а в success -функции добавил нужную отрисовку полученного (правильного!) результата. В результате, что получилось: Шаг1 ДО $.ajax -метода вполне себе успевает нарисовать "Пожалуйста, подождите..." т.к. асинхронный ajax (в Шаге 2) позволяет ей это сделать, начиная параллельно работать сам. т.е. видим надпись, уходим в success-функцию для ожидания валидного резульата (в переменной s) и в ней же (дождавшись) значения - выводим его. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2021, 09:21 |
|
|
start [/forum/topic.php?fid=22&msg=40064193&tid=1443251]: |
0ms |
get settings: |
24ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 244ms |
total: | 409ms |
0 / 0 |