Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

280
Views
¿Cómo puedo obtener los datos de una matriz en la que estoy almacenando en una matriz después de ejecutar un ciclo de promesas? ¿Y exportar esos datos en otro archivo de nodo?

Estoy haciendo un sitio web de música. Quiero hacer una sección de tendencias. Para hacer esa sección de tendencias, estoy usando la API de YouTube para obtener el no. de vistas Así que aquí primero estoy llamando a mi base de datos en la que se almacenan los datos del álbum. En ese campo es tal que almacena la identificación de la canción presente en ese álbum. Entonces, usando esa identificación, estoy ejecutando una función que me da no. de vistas Estoy almacenando la identificación y las vistas de esa canción en arr_song y arr_views respectivamente. Luego quiero exportar este arr_song y arr_views en mi archivo de índice principal. Pero el problema es que los datos se almacenan en una matriz, pero como es una promesa, los datos se almacenan en arr_song y arr_views tarde y antes solo se ejecutan en mi archivo index.js principal. Entonces, finalmente, me muestra una matriz sin nada. Quiero exportar datos de matriz almacenados en mi archivo index.js.

 const axios = require("axios").default; var url = "https://youtube.googleapis.com/youtube/v3/videos?part=statistics&id="; var key = "&key=AIzaSyDwUGeRKMTCeslgQjETBgP1ozqlB0yX9s0"; var id = "sAzlWScHTc4"; var final_url; var arr_song = []; var arr_views = []; function getYTData(songId) { final_url = url + songId + key; axios.get(final_url).then(res => { const yt_data = res.data; console.log(songId); console.log(yt_data.items[0].statistics.viewCount); arr_song.push(songId); arr_views.push(yt_data.items[0].statistics.viewCount); }); } function getting_data() { axios.get("http://localhost:8000/albums/").then(res => { const album_data = res.data; for (var i = 0; i < album_data.length; i++) { for (var j = 0; j < album_data[i].songs_id.length; j++) { getYTData(album_data[i].songs_id[j]); } } }); } getting_data(); const ArrSong = arr_song;
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Tal vez pueda exportar la Promesa que contiene la matriz usando la función Promise.all .

 // data.js const axios = require("axios").default; // return a promise contains an item function getYTData(songId) { return axios.get(final_url).then(res => { let data; // ... return data; }); } exports.promise = axios.get().then(res => { let promises = []; const album_data = res.data; for (var i = 0; i < album_data.length; i++) { for (var j = 0; j < album_data[i].songs_id.length; j++) { // save all the promises, each contains an item promises.push(getYTData(album_data[i].songs_id[j])); } } // pass all promises' items to the variable `promise` return Promise.all(promises); });
 // index.js const { promise } = require("./data.js"); // the data passed from the `promises` promise.then(data => { console.log(data); });

Tenga en cuenta que data.mjs solo se puede ejecutar una vez. Eso significa que no importa cuántas veces import { promise } from "data.mjs" , aún obtienes la misma promesa que contiene los mismos datos.

Si desea actualizar los datos, debe exportar una función como esta

 // data.js // ... function get_data() { return axios.get().then(res => { let promises = []; const album_data = res.data; for (var i = 0; i < album_data.length; i++) { for (var j = 0; j < album_data[i].songs_id.length; j++) { promises.push(getYTData(album_data[i].songs_id[j])); } } return Promise.all(promises); }); } module.exports = { get_data, };

Y luego puede obtener una promesa llamando a la función. Cada vez que llama a la función, obtiene una nueva promesa que contiene los datos más recientes.

 // index.js const { get_data } = require("./data.mjs"); get_data().then(data => { console.log(data); });

Por cierto, su código no funciona, también porque el archivo solo se puede ejecutar una vez.

Debe saber que axios es una función asíncrona.

Cuando importa el archivo, se ejecuta el código síncrono.

En este momento, la matriz es de hecho una matriz vacía.

Después de ejecutar el archivo, la matriz se guarda en el sistema de módulos de forma permanente como una variable const. Nunca se puede cambiar.

Por lo tanto, obtienes una matriz vacía.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!