function layerQuery(objectId) { const featureLayer = view.map.layers.getItemAt(0); const queryParams = featureLayer.createQuery(); queryParams.where = "objectid=" + objectId; queryParams.outFields = ["x", "y", "z"]; featureLayer.queryFeatures(queryParams).then(function (results) { const coords = results.features[0].attributes; direction_lookup(Promise, Promise,coords.x,coords.y) }); const objectIdNext = objectId + 1 const queryParamsTb = featureLayer.createQuery(); queryParamsTb.where = "objectid=" + objectIdNext; queryParamsTb.outFields = ["x", "y", "z"]; featureLayer.queryFeatures(queryParamsTb).then(function (results) { var coordstb = results.features[0].attributes; direction_lookup(coordstb.x, coordstb.y,Promise,Promise) }); //console.log(coordstb.x) }Quiero enviar los cuatro parámetros que obtuvimos como resultado de las dos funciones anteriores a la siguiente función.
function direction_lookup(destination_x, origin_x, destination_y, origin_y) { var compass_brackets, compass_lookup, degrees_final, degrees_temp, deltaX, deltaY; deltaX = destination_x - origin_x; deltaY = destination_y - origin_y; degrees_temp = Math.atan2(deltaX, deltaY) / Math.PI * 180; if (degrees_temp < 0) { degrees_final = 360 + degrees_temp; } else { degrees_final = degrees_temp; } compass_brackets = ["N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"]; compass_lookup = Math.round(degrees_final / 45); return [compass_brackets[compass_lookup], degrees_final]; } console.log(direction_lookup(destination_x, origin_x, destination_y, origin_y));La función de 'búsqueda de dirección' toma cuatro parámetros. Quiero enviar estos cuatro parámetros de dos en dos desde diferentes funciones. Puedo hacer esto
Lo que está tratando de hacer no es posible porque su función direction_lookup necesita que esos cuatro parámetros sean las coordenadas numéricas, no espera ver ningún objeto Promise ni resolverlo. La forma estándar de hacer esto es esperar hasta conocer todos los valores antes de llamar a la función, así:
function layerQuery(objectId) { const featureLayer = view.map.layers.getItemAt(0); const queryParams = featureLayer.createQuery(); queryParams.where = "objectid=" + objectId; queryParams.outFields = ["x", "y", "z"]; featureLayer.queryFeatures(queryParams).then((results) => { const feature1Coords = results.features[0].attributes; const objectIdNext = objectId + 1 const queryParamsTb = featureLayer.createQuery(); queryParamsTb.where = "objectid=" + objectIdNext; queryParamsTb.outFields = ["x", "y", "z"]; featureLayer.queryFeatures(queryParamsTb).then((secondResults) => { const feature2Coords = secondResults.features[0].attributes; direction_lookup(feature2Coords.x, features2Coords.y,feature1Coords.x,feature1Coords.y); }); }); } Ahora realiza su primera consulta y mantiene los resultados dentro del alcance mientras realiza la segunda consulta y finalmente llama a direction_lookup cuando tiene ambos conjuntos de coordenadas listos para funcionar.
Las funciones de flecha se comportan como funciones normales, pero mantienen el alcance principal, lo que puede ahorrar mucha confusión, por lo que para este tipo de tareas es una notación un poco más conveniente.