How to return value from nested function to parent function?

5094
5
05-31-2013 10:58 AM
JoanSteinbacher
New Contributor III
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
New Contributor III
I've added that line but unfortunately it's still not working. Any other ideas?
0 Kudos
JeffJacobson
Occasional Contributor III
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
Occasional Contributor II
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
Occasional Contributor II
Remove load and error function from jsonObject declaration

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