I need some help before I lose what shred of sanity I have left. Let me start out by saying that I am pretty new to JavaScript and dojo. I am trying to rewrite our JS maps to AMD and have hit a wall when it comes to converting a DeferredList to the new dojo/promise API.
Not to overwhelm you with code, I'll just paste a snippet of the "old" code (I am aware of converting to array.map etc. but just want to show what I'm starting with).
var tasks = dojo.map(layers, function(layer) {
return new esri.tasks.IdentifyTask(layer.url);
});
//map each visible dynamic layer to a new identify task, using the layer url
var defTasks = dojo.map(tasks, function (task) {
return new dojo.Deferred();
});
//map each identify task to a new dojo.Deferred
var dlTasks = new dojo.DeferredList(defTasks); //And use all of these Deferreds in a DeferredList
dlTasks.then(showIDResults); //chain showResults nto your DeferredList ***PROBLEM HERE****
idParams.width = map.width;
idParams.height = map.height;
idParams.geometry = evt.mapPoint;
idParams.mapExtent = map.extent;
alert(tasks.length);
for (i=0;i<tasks.length;i++) { //Use 'for' instead of 'for...in' so you can sync tasks with defTasks
try {
tasks[i].execute(idParams, defTasks[i].callback, defTasks[i].errback); //Execute each task
}
catch (e) {
console.log("Error caught");
console.log(e);
defTasks[i].errback(e); //If you get an error for any task, execute the errback
}
}
The showIDResults function expects an array of results from execution of the tasks. This is were I'm having a problem. No matter what I try (and I've tried a lot of things) I end up with a Deferred or a Promise rather than actual results to pass to showIDResults.
Am I making any sense? Any help would be greatly appreciated!