Я хочу отправить запрос Ajax и выполнить некоторые несвязанные действия во время поступления данных. После окончания действия мне нравится ждать окончания Ajax и выполнять другие действия.Смешение синхронных функций и асинхронных отложенных объектов jQuery
Для того, чтобы быть конкретными позволяет видеть, чтобы раздели например:
$.ajax({url: "/reqA"})
.done(updateA)
.done($.ajax("/reqB").done(updateB))
.done(updateFinal)
updateFinal
должен быть выполнен после завершения синхронного и асинхронного updateA
/reqB
и следующего синхронной updateB
.
Выше кода неверен, потому что все последующие .done()
действует по договору с /regA
, а состояние гонки происходит между updateB
и updateFinal
.
я могу исправить код с .then
:
$.ajax({url: "/reqA"})
.done(updateA)
.then($.ajax("/reqB").done(updateB))
.done(updateFinal)
Но затем я хочу, чтобы запустить updateA
после отправки запроса /reqB
(потому что JS двигатель однопоточный и updateA
исполнения заблокировало асинхронный процесс /reqB
!!).
следующий код не работает:
$.ajax({url: "/reqA"})
.then($.ajax("/reqB").done(updateB))
.done(updateA)
.done(updateFinal)
потому что updateA
исполнение будет отложено до updateB
исполнения !!
Я думаю, что проблема может быть решена с помощью функции $.when
, но updateA
не является обещанием, и я не вижу порядка выполнения гарантии в официальном $.when документах. Это может выглядеть следующим образом:
$.ajax({url: "/reqA"})
.then(
$.when(
$.ajax("/reqB").done(updateB),
fakeResolvedPromiseWrapperAroundSyncFunc(updateA)
)
).done(updateFinal)
Есть ли стандартный fakeResolvedPromiseWrapperAroundSyncFunc
решение в библиотеке JQuery?
Любой другой путь для запуска синхронного кода после запуска асинхронного и последующего присоединения к результату асинхронного вызова?
Не знаю, что такое 'updateA' и' updateB' ... используйте результат соответствующего '$ .ajax' для выполнения своей функции? Ваши более поздние фрагменты кода предполагают, что они не –