Escribí una clase inusual en la que imaginé que podría cargar un archivo JSON para cumplir con muchas de las configuraciones de la clase e iniciar un objeto en consecuencia. Excepto que lo que sucede es que la función regresa de forma asíncrona mientras esperamos la promesa del sistema de archivos (y eso es un no cuando se extiende una clase, ya que se debe llamar a super()
). Claro, podría ir sincrónico con la llamada fs
, pero eso parece una tirita. ¿Cuál es la manera correcta de hacer esto?
module.exports = class EntityLoader extends Entity { constructor(args, jsonPath="./web/classes/objects/box-pile.json"){ fs.promises.readFile(jsonPath, 'utf8').then(data => { const settings = JSON.parse(data) super({ ...settings, ...args }) this.ready.then(() => { if (settings.children) settings.children.forEach(childSettings => { this.addChildSprite({...childSettings}).position.set(...childSettings.position[0]) }) }) }); } }
Error:
... snip ...\classes\objects\box-pile.js:31 Uncaught ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor at new EntityLoader ... snip ...