¿Cómo puedo enviar res.data.values a otro module.js ? ¿Y cómo puedo obtenerlo en module.js ? El siguiente código es una parte del código proporcionado por el siguiente enlace: https://developers.google.com/sheets/api/quickstart/nodejs
Los valores de res.data.value tardan un tiempo en responder, por lo que creo que este es mi problema principal y no sé cómo manejarlo.
function listMajors(auth) { const sheets = google.sheets({version: 'v4', auth}); sheets.spreadsheets.values.get({ spreadsheetId: '1XrmHL0D8HCulZYaB_ocrYlpnvqP9cO0BTJ14wHTGLis', range: 'Ficha', }, (err, res) => { if (err) return console.log('The API returned an error: ' + err); const rows = res.data.values; if (rows.length) { console.log(rows) } else { console.log('No data found.'); } }); }Si entiendo bien tu problema. Está buscando una solución para el manejo de datos asíncronos. Hay muchas preguntas/respuestas que puede encontrar en Internet. Pero solo para ayudar rápidamente, consulte la respuesta a continuación.
//List.js // Using callback function listMajors(auth, cb) { const sheets = google.sheets({ version: "v4", auth }); sheets.spreadsheets.values.get( { spreadsheetId: "1XrmHL0D8HCulZYaB_ocrYlpnvqP9cO0BTJ14wHTGLis", range: "Ficha", }, (err, res) => { cb(err, res.data.values.length ? res.data.values : []); } ); } exports.listMajors = listMajors; // main.js // in other module const { listMajors } = require("./List"); listMajors("auth", (error, rows) => { if (error) { /// show error message } else if (rows.length) { // display rows } else { //display empty } }); Dado que las hojas de Google proporcionan un método prometedor. Puede simplificar usando async-await o promesas. A continuación se muestra un ejemplo que usa async-await . Simplemente puede usar `promise-then
// Using async-await //List.js async function listMajors(auth) { const sheets = google.sheets({ version: "v4", auth }); try { const res = await sheets.spreadsheets.values.get({ spreadsheetId: "1XrmHL0D8HCulZYaB_ocrYlpnvqP9cO0BTJ14wHTGLis", range: "Ficha", }); return res.data.values.length ? res.data.values : []; } catch (error) { throw error; } } exports.listMajors = listMajors; // main.js const { listMajors } = require("./List"); // in other module async function main() { try { const rows = await listMajors("auth"); if (rows.length) { // display rows } else { //display empty } } catch (error) { /// show error message } } main();El problema que describiste se puede resolver con la arquitectura pub-sub:
Hay muchas bibliotecas que pueden lograr esto, como Redis:
const express = require("express") const redis = require("redis") const subscriber = redis.createClient() const app = express() subscriber.on("message", (channel, message) => { console.log("Received data :" + message) }) app.get("/", (req, res) => { res.send("subscriber two") }) subscriber.subscribe("user-notify") app.listen(3007, () => { console.log("server is listening to port 3007") })