Como experimento mental y también para profundizar mi comprensión de la programación asíncrona, me gustaría usar el método Next.JS getStaticProps sin utilizar la sintaxis aysnc/await . De hecho, me gustaría hacerlo usando solo devoluciones de llamada. Me estoy metiendo en problemas y me pregunto si esto es posible. Estoy pensando que debe ser porque async/await es solo azúcar sintáctico para promesas, que a su vez son azúcar sintáctico para el infierno de devolución de llamada, ¿correcto? Aquí está mi función getStaticProps :
export function getStaticProps() { let products; let productPath = path.join(process.cwd(), '/data/products.json') // the async call fs.readFile(productPath, 'utf-8', (err, data) => { if (err) throw err; products = JSON.parse(data); }); return { props: { products } } } El valor devuelto debe ser un objeto con una propiedad props , que a su vez tiene los datos destinados a pasarse al componente de página para su representación. Estoy perdido sobre cómo lograr esto con solo devoluciones de llamada. Sé que async/await es mucho más sencillo, pero nuevamente, me gustaría aprender.
Debe devolver la promesa ya que su código no es síncrono. Puede hacerlo sin await creando la promesa manualmente:
export function getStaticProps() { let productPath = path.join(process.cwd(), '/data/products.json'); return new Promise((resolve, reject) => { fs.readFile(productPath, 'utf-8', (err, data) => { if (err) return reject(err); const products = JSON.parse(data); resolve({ props: { products }, }); }); }); }