esri javascript异步打印 设置:

esri javascript异步打印 设置:,javascript,asynchronous,dojo,esri,arcgis-js-api,Javascript,Asynchronous,Dojo,Esri,Arcgis Js Api,我使用的是,它本身使用的是dojotoolkit v。1.6。我在Amazon的EC2上运行Windows 我可以使用javascript成功执行PrintTask,将JSON发布到我的服务器,服务器运行一个进程并将PDF返回到客户端浏览器。但此请求是同步的,可能需要一两分钟,导致Heroku超时并出现H12错误 问题是: 当我在ArcGIS服务器上将[]异步复选框切换为ON时,我的PrintTask返回: {"error":{"code":500,&qu

我使用的是,它本身使用的是dojotoolkit v。1.6。我在Amazon的EC2上运行Windows

我可以使用javascript成功执行PrintTask,将JSON发布到我的服务器,服务器运行一个进程并将PDF返回到客户端浏览器。但此请求是同步的,可能需要一两分钟,导致Heroku超时并出现H12错误

问题是: 当我在ArcGIS服务器上将[]异步复选框切换为ON时,我的PrintTask返回:

{"error":{"code":500,"message":"Error performing execute operation","details":[]}}
我不知道接下来该怎么办。有没有人有在ArcGIS服务器上运行异步打印任务的示例或经验

printTask的javascript如下所示。有没有一种方法可以将此javascript重新编写为更异步的或“非阻塞的”

代码 (为简洁起见,请精简)

dojo.require(“esri.tasks.PrintTask”);
函数打印(){
var printTool=此;
this.executePrint=函数(){
var params=新的esri.tasks.PrintParameters();
params.map=map;
params.template=selectedTemplate;
printTask=new esri.tasks.printTask(printUrl,{async:true});
printTask.execute(参数,printTool.printComplete,printTool.printError);
};
this.printComplete=函数(结果){
dojo.place(“”,printForm,“last”);
};
this.printError=函数(err){
dojo.byId(“printJob”).innerHTML=err;
};
}

如果是页面加载驱动的事件,请根据您的版本使用
dojo.addOnLoad
dojo.ready

如果您正在从用户事件(例如单击)调用
Print
,最简单的方法是安排它在空闲时运行

function whenIdle(ptr_fun) {
    setTimeout(ptr_fun, 1);
}
whenIdle(Print);

调用打印任务时,如果任务是异步的,则需要调用printTask.submitJob方法,而不是execute方法


从ESRI的Javascript API 2.8版升级到3.2版解决了这个问题。看起来{async:true}参数在2.8版上没有影响,但在3.2版上有影响,作为对其他人的提醒;在PrintParameters中将async设置为true时调用submitJob。否则,在同步时,将调用execute()函数。您的JavaScript代码仍将调用printTask.execute,但使用开发人员工具,您会注意到URL显示printTask调用submitJob(即arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task/submitJob)。
function whenIdle(ptr_fun) {
    setTimeout(ptr_fun, 1);
}
whenIdle(Print);