推迟执行,包括成功回调

时间:2013-08-29 22:20:20

标签: javascript jquery promise deferred

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

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

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

1 个答案:

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

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