2013-08-29 2 views
0

Мне нужно переписать код javascript, который имеет некоторые проблемы синхронизации. Я использую jquery 1.7 и звоню в метод GenerateData(), который вызывает $ .ajax с успехом и отказывает обратные вызовы.Отложенное выполнение, включая успешный обратный вызов

GenerateData() вызывает веб-сервис, чтобы получить список записей, которые передаются в обратный вызов успеха, который, в свою очередь, генерирует и файл данных xml на диске. Когда вызов успешный, файл xml объединяется с pdf-шаблоном для создания pdf-документа. Что происходит сейчас, так это то, что PDF-файл объединяется до экспорта XML-файла. Я пытаюсь решить проблему, используя .when (GenerateData) /. Then (CreatePDF) и, похоже, работает для основных функций (GenerateData и CreatePDF), но если я добавлю обратный вызов успеха в GenerateData, CreatePDF выполнит перед успехом обратный вызов завершается.

Должны ли обработчики обратного вызова также откладываться, и если да, то как их кодировать? Я не нашел конкретный пример онлайн ...

Павла

+0

Необходимо увидеть код. –

ответ

0

Вы можете использовать отложенный объект

var myAsyncPromise = new $.Deferred(); //resolved when the xml is done 

var promise = $.ajax({}); //some ajax call 

var createXml = function() { 

    //when this code is run and complete do this 
    myAsyncPromise.resolve(); 
} 
var complete = $.when(promise, myAsyncPromise); 


complete.done(function (data){ 
     //when both async actions are done this code will run 
}); 

Если у вас есть два асинхронных функция, которые вам нужно ждать, чтобы бежать ваш код - это один из способов сделать это.

Смежные вопросы