асинхронная печать esri javascript

Установка:

Я использую JavaScript API v. 2.8 от ESRI, которая сама использует dojo toolkit v. 1.6. У меня есть ArcGIS Server v. 10.1 работает на Windows в Amazon EC2.

Я могу успешно выполнить PrintTask с javascript, который отправляет JSON на мой сервер, который запускает процесс и возвращает PDF-файл в клиент-браузер. Но этот запрос является синхронным и может занять минуту или две, что приведет к тайм-ауту Heroku с ошибкой H12.

Эта проблема:

Когда я переключаю флажок [ ] Asynchronous на ON на сервере ArcGIS, моя PrintTask возвращает:

{"error":{"code":500,"message":"Error performing execute operation","details":[]}}

Я не уверен, куда идти отсюда. Есть ли у кого-нибудь примеры или опыт выполнения задачи асинхронной печати на сервере ArcGIS?

Ниже приведен javascript для printTask. Есть ли способ переписать этот javascript, чтобы он был более асинхронным или неблокирующим?

Код

(урезано для краткости)

dojo.require("esri.tasks.PrintTask");

function Print() {
  var printTool = this;

  this.executePrint = function(){
    var params = new esri.tasks.PrintParameters();
    params.map = map;
    params.template = selectedTemplate;
    printTask = new esri.tasks.PrintTask(printUrl, {async: true});
    printTask.execute(params, printTool.printComplete, printTool.printError);
  };

  this.printComplete = function(result){
    dojo.place("<div><a href='" + result.url + "'></a></div>", printForm, "last");
  };

  this.printError = function(err){
    dojo.byId("printJob").innerHTML = err;
  };

}

person ballPointPenguin    schedule 14.09.2012    source источник


Ответы (2)



Если это событие, связанное с загрузкой страницы, используйте dojo.addOnLoad или dojo.ready, в зависимости от вашей версии.

Если вы вызываете Print из пользовательского события (например, щелчка), самый простой выход - запланировать его запуск в режиме ожидания.

function whenIdle(ptr_fun) {
    setTimeout(ptr_fun, 1);
}
whenIdle(Print);
person mschr    schedule 15.09.2012
comment
Обновление с версии 2.8 Javascript API ESRI до версии 3.2 устранило проблему. Похоже, что параметр {async: true} не имел значения в 2.8, но имеет значение в 3.2. - person ballPointPenguin; 10.10.2012