Por lo tanto, estoy tratando de crear una API básica de chatarra web y estoy usando una función común PullArticle() con un bucle anidado para recopilar artículos con palabras clave (diferentes conjuntos de artículos y diferentes conjuntos de palabras clave) según la solicitud GET que envíe.
Necesito restablecer la variable de devolución de llamada "artículo" entre las solicitudes GET para mantener los datos separados, pero solo agrega llamadas anteriores a cada solicitud GET que puede duplicar datos si llamo a la misma solicitud dos veces.
Intenté usar una función de devolución de llamada y anteriormente una función de promesa siguiendo el consejo de StackOverFlow, ya que tenía la impresión de que la función Topic.forEach se ejecutaba de forma asincrónica, lo que provocaba que el "artículo" devuelto simplemente regresara vacío; sin embargo, no he podido hacer que funcione sin importar qué, y esperaba que alguien pudiera señalar lo que estoy haciendo mal aquí.
var article = [] function PullArticle (Topic, myCallback) { article =[] // IF I LEAVE THIS RESET OUT ARRAY RETURNS EMPTY :( Topic.forEach(TopicLoop => { newspapers.forEach(newspapers =>{ axios.get(newspapers.address) // pulling html .then((response)=>{ const html = response.data const $ = cheerio.load(html) //allows to pickout elements $(`a:contains(${TopicLoop})`,html).each(function () { const title = $(this).text() const url = $(this).attr('href') article.push ({ title, url: newspapers.base + url, source: newspapers.name, }) }) }) }) }) let sendback = article myCallback(sendback) }En el mismo archivo hago una solicitud de obtención con
app.get('/TopicMatrix1',(req,res) =>{ PullArticle( Topic1, myDisplayer) function myDisplayer (PrintArticle){ res.json(PrintArticle) } }) app.get('/SomeOtherTopic',(req,res) =>{ PullArticle() etc }Además, ¿alguien sabe por qué no puedo hacer la función myDisplayer(), que imprime res.json una función común que se encuentra fuera de la solicitud GET, por lo que las solicitudes GET separadas pueden llamarla?