0

我需要重写一些有一些同步问题的 javascript 代码。我正在使用 jquery 1.7 并调用一个名为 GenerateData() 的方法,该方法调用 $.ajax 并带有成功和失败回调。

GenerateData() 调用 web 服务来检索传递给成功回调的记录列表,成功回调又在磁盘上生成 xml 数据文件。调用成功后,将xml文件与pdf模板合并,创建pdf文档。现在发生的事情是在导出 xml 文件之前合并 pdf。我正在尝试通过使用 .when (GenerateData)/.then(CreatePDF) 来解决问题,它似乎适用于主要功能(GenerateData 和 CreatePDF),但如果我向 GenerateData 添加成功回调,则 CreatePDF 在成功之前执行回调结束。

回调处理程序是否也应该被推迟,如果是,它们应该如何编码?我还没有在网上找到具体的例子......

保罗

4

1 回答 1

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
});

如果你有两个异步函数需要等待才能运行你的代码,这是一种方法。

于 2013-08-29T22:38:52.417 回答