Soy nuevo en javascript, estoy tratando de pasar el resultado de una función anidada al resto de la función principal. ¿quizás?
Tengo documentos en una colección mongodb e información de la empresa en otra. Así que estoy tratando de emparejarlos como esta parte del código, pero no está haciendo lo que estoy tratando de hacer. Creo que claramente me estoy perdiendo algo sobre javascript y la forma en que funciona.
data es una lista de documentos y sus variables.
Data.find(arg_object, function (err, data){ if (err){ console.log(err); } else { console.log("LENGTH", data.length) for (i in data) { Companies.find({_id: data[i]['_id']}) .then(companies => { console.log("Company Name:") console.log("NAME >>>> >>>> ", companies[0]['name']); return companies }) .catch(err => { console.log(err); }) search_reply = { '_id': data[i]['_id'], 'title': data[i]['title'], 'url': data[i]['url'], 'release_date': data[i]['release_date'], 'document_date': data[i]['document_date'], 'name': companies[0]['name'], } answers[i] = search_reply } return res.json(answers); } })Puede mover toda su lógica search_reply dentro de la promesa y luego devolver la llamada. La otra solución que podría ser más fácil es usar async/await para manejar Promises. Primero supongamos que su función principal se llama getSearchResults , por lo que, en función de eso, su código se vería así:
async getSearchResults() { for (i in data) { try { const companies = await Companies.find({ _id: data[i]['_id'] }); console.log("Company Name:") console.log("NAME >>>> >>>> ", companies[0]['name']); search_reply = { '_id': data[i]['_id'], 'title': data[i]['title'], 'url': data[i]['url'], 'release_date': data[i]['release_date'], 'document_date': data[i]['document_date'], 'name': companies[0]['name'], } answers[i] = search_reply } catch (err) { console.log(err); } } }