Soy nuevo en el manejo de promesas en javascript y encontré un problema con este nodo js lib https://www.npmjs.com/package/wordpos Estoy tratando de encontrar todos los verbos que se encuentran dentro de una matriz de cadenas , y para ello he creado esta función:
function calculateVerbsAmount(stringsArray) { return stringsArray.map(function(item) { let element = wordpos.getVerbs(item, function(result){ return result; }); });}
Lo que espero es tener una nueva matriz, esta vez de cadenas de verbos, pero dado que lib maneja los métodos como devoluciones de llamada, estoy recibiendo
[Promise { <pending> }, Promise { <pending> }, Promise { <pending> }, Promise { <pending> }, Promise { <pending> }, Promise { <pending> }]Intenté agregar async/await pero siempre devuelven el mismo resultado, ¿alguna idea sobre cómo hacer una llamada síncrona al método wordpos.getVerbs?
Llamar wordpos.getVerbs() devuelve una promise . Dado que está haciendo esto dentro de una función .map , su stringsArray será una matriz de promesas (como en realidad obtiene como retorno).
Se puede desenvolver una sola Promise usando await . Para una matriz de Promises , puede usar el asistente Promise.all que permite esperar cada Promise dentro de una array .
async function calculateVerbsAmount(stringsArray) { const verbPromises = stringsArray.map(function(item) { let element = wordpos.getVerbs(item, function(result){ return result; }); }); // await every Promise within the verbPromises array. Promise.all // returns a single Promise which holds an array with the native values return Promise.all(verbPromises) } // the keyword "await" can only be used within an async function. // So for showcasing it i created the main() function .. async function main() { // Now call the calculateVerbsAmount() and await it for receiving the expected // array of strings. const verbs = await calculateVerbsAmount() }