La variable cuando se pasa a través de una función devuelve una propiedad de valor indefinido. Estoy pasando la variable ApiId o ApiName . ¿Debería envolverse el name de la variable de alguna otra manera dentro de la función?
Estoy usando este método de respuesta y lo uso dentro de una función.
function dimensionValue(name) { console.log("Testing") return sns.Trigger.Dimensions.find(dimension => dimension.name === name).value }Si trato de console.log, entonces funciona bien.
console.log(sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiId').value)
Error:
ERROR Invoke Error { "errorType": "TypeError", "errorMessage": "Cannot read property 'value' of undefined", "stack": [ "TypeError: Cannot read property 'value' of undefined", " at dimensionValue (/var/task/index.js:20:80)", " at Runtime.exports.handler (/var/task/index.js:37:36)", " at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)" ] } code:
function dimensionValue(name) { console.log("Testing") //var dimensionsValue = sns.Trigger.Dimensions.find(dimension => dimension.name === name).value return sns.Trigger.Dimensions.find(dimension => dimension.name === name).value } if (sns.Trigger.Namespace == "AWS/ApiGateway") { console.log("Testing2") if (sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiId') && sns.Trigger.Dimensions.find(dimension => dimension.name === 'Stage')) { console.log('ApiId and Stage') var sns_DimensionsValue = dimensionValue('ApiId') + '_' + dimensionValue('Stage') } else if (sns_DimensionsValue == sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiName') && sns.Trigger.Dimensions.find(dimension => dimension.name === 'Stage')) { console.log('ApiName and Stage') var sns_DimensionsValue = dimensionValue('ApiName') + '_' + dimensionValue('Stage') } else if (sns_DimensionsValue == sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiId')) { console.log('ApiId') var sns_DimensionsValue = dimensionValue('ApiId') } else if (sns_DimensionsValue == sns.Trigger.Dimensions.find(dimension => dimension.name === 'ApiName')) { console.log('ApiName') var sns_DimensionsValue = dimensionValue('ApiName') } }El problema son esas partes sns_DimensionsValue == al comienzo de cada condición. Solo quítalos.
Esencialmente lo hace if (undefined == findAppId() && findStage()) , que será cierto si se encontró Stage y AppId no , pero luego intenta acceder al valor de AppId y falla.
Permítanme sugerir un enfoque generalmente simplificado:
const dimensions = Object.fromEntries(sns.Trigger.Dimensions.map(d => [d.name, d.value])) let sns_DimensionsValue = dimensions.ApiId ?? dimensions.ApiName if (!sns_DimensionsValue) throw new Error('No API ID/API name found') if (dimensions.Stage) sns_DimensionsValue += '_' + dimensions.Stage