2013-10-04 143 views
2

所以我有這兩個函數,然後調用它們的另一個函數。看起來我正在失去範圍,在函數調用之間。函數不返回正確的值

var determineInteractionType = function(interaction){ 

    var param = interaction.parameterSet.param; 

    param.forEach(function(parameter, index, array){ 
     if(parameter.name === "INTERACTION-TYPE"){ 
      return parameter.value; 
     } 
    }); 
    return null; 
}; 

var getInteraction = function(id){   

    customInteractions.forEach(function(interaction, index, array){    
     if(interaction.id == id){ 
      alert(id); 
      return interaction; 
     } 
    }); 
    return null; 
}; 

這是調用函數的一段代碼。錯誤在於,即使getInteraction正在返回一個值,它仍然顯示出determinInteraction正在傳遞一個null參數。

var _convertStemFromEAS = function(stem) { 
    var reg = new RegExp('@\{PRESENTATION-HTML-INTERACTION\}="(.*?)"'); 
    var result; 
    var count = 1;  

    while ((result = reg.exec(stem)) !== null) { 

     var Match = result[0]; 
     var dropdownGuid = result[1]; 

//The Error seems to be right here 
     var interactionType = determineInteractionType(getInteraction(id)); 


     if(interactionType === "shortTextInteraction"){   
      var escaped = $('<div/>').text('<select id="' + NewTmpGuid() + '" data-choice-id="' + dropdownGuid + '" style="width:100px;" data-count="' + count + '" class="easSelection"><option>DD' + count + '</option></select>').html(); 
     }else if(interactionType === "essayTextInteraction"){ 

     } 

     count += 1; 
     stem = stem.replace(Match, escaped); 
    } 
    return stem;  
}; 

回答

1

determineInteraction返回null,因爲這是它的編碼返回。

當您在forEach循環中的內部函數return時,您不會從determineInteraction返回。

你想要做的是這樣的:

var determineInteractionType = function(interaction){ 

    var 
    returnValue = null, 
    param = interaction.parameterSet.param; 


    param.forEach(function(parameter, index, array){ 
     if(parameter.name === "INTERACTION-TYPE"){ 
      returnValue = parameter.value; 
     } 
    }); 

    return returnValue; 
}; 
+0

我剛剛想出什麼我需要做的,但不知其所以然。爲了原因,我會給你加5。 javascript中的常見錯誤模式我覺得。 – RadleyMith

+1

我不認爲'return false'會打破'forEach'。 –