Estoy tratando de devolver la lista creada con el valor recibido de API a donde se llamó. Estoy usando Promise para asegurarme de que la función devuelva el valor después de obtener el valor de llamar a la API. Para explicar mejor con el código, tengo una función callAPI que llama a getNamedEntity . En última instancia, quiero que callAPI reciba el resultado de request.post() en getNamedEntity . Sin embargo, obtengo el objeto Promise y no estoy definido cuando pruebo con console.log("outside " + result) y console.log("inside doRequest " + result) dentro de cada función respectivamente.
function callAPI(text) { const result = getNamedEntity(text); console.log("outside " + result); } async function getNamedEntity(text) { var requestJson = { ... }; var options = { ... }; function doRequest(options) { return new Promise(function (resolve, reject) { request.post(options, function (error, response, body) { if (!error && response.statusCode == 200) { const result = resolve(body); console.log("inside doRequest " + result); } else { reject(error); } }); }); } doRequest(options) .then((body) => { var entityList = []; const obj = JSON.parse(body); const words = obj.return_object.sentence[0].NE; for (var word of words) { entityList.push(word.text); } return entityList; }) .catch((error) => { console.log(error); }); } outside [object Promise] inside doRequest undefinedconsole.log("outside " + result) devuelve un objeto de promesa porque olvidó await a getNamedEntity(text); o, como alternativa, coloque console.log dentro de .then , como getNamedEntity(text).then(result => console.log(result));
console.log("inside doRequest " + result); devuelve undefined porque la función de resolve devuelve void, es decir, no devuelve nada. Cambie a console.log("inside doRequest " + body); o mueva el archivo console.log a la .then((body) .