Select to view content in your preferred language

How to return value from nested function to parent function?

5465
5
05-31-2013 10:58 AM
JoanSteinbacher
Occasional Contributor
I have the following code working, but I need to return the value of the resultant "fieldInfos" string to the createFieldInfos() function and I'm not sure how to do that. Can anyone point me in the right direction?

Thanks,
Joan

function createFieldInfos() {
 console.log("-->inside createFieldInfos function");
 var endpoint = "http://gis.tpcmaps.org/ArcGIS/rest/services/LandUse/Existing_Land_Use/MapServer/0";

 var jsonobject = esri.request({
  url: endpoint,
  content: { f: 'json' },
  callbackParamName: 'callback',
  load: processServiceInfo,
  error: errorHandler  
 });
 console.log("jsonobject: " + jsonobject);
}

function processServiceInfo(info) {
 console.log('layer info: ', info);
 console.log("info.name: " + info.name + ",info.id: " + info.id);

       var fieldInfos = "";
       fieldInfos += "[";
    
 dojo.forEach(info.fields, function(field) {
  console.log( "Name: " + field.name + ", Alias: " + field.alias);
  if (field.name != "Shape" & field.name != "OBJECTID") {
   fieldInfos += "{'fieldName': '" + field.name + "',";
   fieldInfos += "'label': '" + field.alias + "',"; 
   fieldInfos += "'visible':" + true + "},";    
  }
 });
 
 fieldInfos += "],";
 console.log("fieldInfos: " + fieldInfos);
}
function errorHandler(err) {
    console.log('error: ', err);
}
0 Kudos
5 Replies
KenBuja
MVP Esteemed Contributor
This should do it

function processServiceInfo(info) {
    console.log('layer info: ', info);
    console.log("info.name: " + info.name + ",info.id: " + info.id);

       var fieldInfos = "";
       fieldInfos += "[";
    
    dojo.forEach(info.fields, function(field) {
        console.log( "Name: " + field.name + ", Alias: " + field.alias);
        if (field.name != "Shape" & field.name != "OBJECTID") {
            fieldInfos += "{'fieldName': '" + field.name + "',";
            fieldInfos += "'label': '" + field.alias + "',";    
            fieldInfos += "'visible':" + true + "},";                
        }
    });
    
    fieldInfos += "],";
    console.log("fieldInfos: " + fieldInfos);
    return fieldInfos;
}
0 Kudos
JoanSteinbacher
Occasional Contributor
I've added that line but unfortunately it's still not working. Any other ideas?
0 Kudos
JeffJacobson
Frequent Contributor
Try this:
function createFieldInfos() {
    var endpoint, jsonobject, fieldInfos = "";

    function processServiceInfo(info) {
        console.log('layer info: ', info);
        console.log("info.name: " + info.name + ",info.id: " + info.id);
        fieldInfos += "[";

        dojo.forEach(info.fields, function (field) {
            console.log("Name: " + field.name + ", Alias: " + field.alias);
            if (field.name != "Shape" & field.name != "OBJECTID") {
                fieldInfos += "{'fieldName': '" + field.name + "',";
                fieldInfos += "'label': '" + field.alias + "',";
                fieldInfos += "'visible':" + true + "},";
            }
        });

        fieldInfos += "],";
        console.log("fieldInfos: " + fieldInfos);
    }

    function errorHandler(err) {
        console.log('error: ', err);
    }

    console.log("-->inside createFieldInfos function");
    endpoint = "http://gis.tpcmaps.org/ArcGIS/rest/services/LandUse/Existing_Land_Use/MapServer/0";

    jsonobject = esri.request({
        url: endpoint,
        content: {
            f: 'json'
        },
        callbackParamName: 'callback',
        load: processServiceInfo,
        error: errorHandler
    });
    console.log("jsonobject: " + jsonobject);
}
0 Kudos
VinayBansal
Frequent Contributor
Try this code

function createFieldInfos() {
 console.log("-->inside createFieldInfos function");
 var endpoint = "http://gis.tpcmaps.org/ArcGIS/rest/services/LandUse/Existing_Land_Use/MapServer/0";

 var jsonobject = esri.request({
  url: endpoint,
  content: { f: 'json' },
  callbackParamName: 'callback',
  load: processServiceInfo,
  error: errorHandler  
 });
 console.log("jsonobject: " + jsonobject);
 return jsonobject.then(processServiceInfo, errorHandler);
}

function processServiceInfo(info) {
 console.log('layer info: ', info);
 console.log("info.name: " + info.name + ",info.id: " + info.id);

       var fieldInfos = "";
       fieldInfos += "[";
    
 dojo.forEach(info.fields, function(field) {
  console.log( "Name: " + field.name + ", Alias: " + field.alias);
  if (field.name != "Shape" & field.name != "OBJECTID") {
   fieldInfos += "{'fieldName': '" + field.name + "',";
   fieldInfos += "'label': '" + field.alias + "',"; 
   fieldInfos += "'visible':" + true + "},";    
  }
 });
 
 fieldInfos += "],";
 console.log("fieldInfos: " + fieldInfos);
return fieldInfos;
}
function errorHandler(err) {
    console.log('error: ', err);
return null;
}
0 Kudos
VinayBansal
Frequent Contributor
Remove load and error function from jsonObject declaration

var jsonobject = esri.request({
  url: endpoint,
  content: { f: 'json' },
  callbackParamName: 'callback'
});
0 Kudos