Estoy implementando un fragmento de código que pasa por la compilación del proyecto y verifica si hay varias páginas con featured: true . Si ese es el caso, quiero arrojar un error, para que un trabajo qa en una canalización falle. Todo funcionaría bien, pero obtengo:
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()este es mi código:
/* eslint-disable no-restricted-syntax */ const fs = require('fs'); const findInDir = require('./utils/findInDir'); (async () => { const dir = './public/page-data/blog'; const fileRegex = /.*/; const allFiles = findInDir(dir, fileRegex); let result = 0; for (const file of allFiles) { try { // eslint-disable-next-line no-await-in-loop const data = await fs.promises.readFile(file); const obj = JSON.parse(data); if (obj.result.pageContext.featured === true) { result += 1; } } catch (err) { // noop } } if (result > 1) { throw new Error('There are multiple featured blog posts, please fix.'); } })();¿Cómo puedo arrojar un error en la función asíncrona?
Puede manejar el error con un bloque catch, como este: -
/* eslint-disable no-restricted-syntax */ const fs = require('fs'); const findInDir = require('./utils/findInDir'); (async () => { const dir = './public/page-data/blog'; const fileRegex = /.*/; const allFiles = findInDir(dir, fileRegex); let result = 0; for (const file of allFiles) { try { // eslint-disable-next-line no-await-in-loop const data = await fs.promises.readFile(file); const obj = JSON.parse(data); if (obj.result.pageContext.featured === true) { result += 1; } } catch (err) { // noop } } if (result > 1) { throw new Error('There are multiple featured blog posts, please fix.'); } })().catch((e) => { console.log(e); });