У меня есть три функции, которые работают с данными глобального объекта. Этот глобальный объект заполняется данными из локального массива в одной функции и данными из запроса ajax со второй функцией. Третья функция зависит от данных в объекте, поэтому запрос ajax должен быть завершен.как обрабатывать асинхронно: функция C зависит от функции B в зависимости от функции A
Я считаю, что ошибаюсь в обратных вызовах. Вот что я делаю:
var currentCharacter = {}
// this function gets the local data and then calls the second function
function loadData(getMarvelData) {
// do things to fill currentCharacter
getMarvelData(); // this is the callback to the next function (no ?)
}
// this function performs the ajax request, then calls the third function
function getMarvelData(getGoogleMap) {
// do ajax request and add stuff to currentCharacter
getGoogleMap(); // this is the callback to the final function (no ?)
}
function getGoogleMap() {
// do Google Map related stuff with data from currentCharacter
}
Я думал, установив функцию в качестве аргумента другой функции, а затем выполняет это сделает функция зависит от другого, прежде чем она продолжается. Ясно, что я все еще неправильно понимаю обратные вызовы, пытаясь заставить его работать уже неделю. Как бы то ни было, функция getMarvelData даже не вызывается, потому что я никогда не вижу всплывающее окно предупреждения, а у объекта currentCharacter есть только данные из функции loadData.
Может ли кто-нибудь показать правильный подход для моего кода, или если мой подход к выполнению этих трех функций является даже правильным для этого сценария.
Полный репозиторий доступен по адресу: https://github.com/ChaMbuna/Marvel-Map v0.9 был на самом деле работает, но вызов Ajax был настроен на запуск синхронными (это все еще кстати) С тех пор я капитальным ремонт моего кода, чтобы заставить его работать в асинхронном режиме и удалить все jQuery (это проект Udacity и удаление jQuery было предложено инструктором).
Цените помощь
Эти функции, которые вы вызываете «назад», являются * параметрами *. Тем не менее, вы никогда не пропускаете никаких аргументов! – Bergi
Кроме того, вам нужно вызвать их из асинхронной части вашего кода (обработчик 'onreadystatechange'), а не только в конце функции! – Bergi
Поскольку вы в зависимости от завершения запроса ajax, вы можете использовать функцию успеха в вызове ajax для выполнения других функций, которые зависят от этого, заканчивая первым. – lintmouse