Hi all:

I’m wondering if there is any way to combine a class decorator and an async 
process together? A common case would be a generic IoC implementation:

Since in JavaScript IoC we load runtime modules async by a config file, the 
interface may be:

{Promise} ioc.getComponent({string} componentName)

which resolves the returned Promise giving required instance of componentName, 
and this is a method that cannot be sync since we need a config file to map 
componentName to its implementing module and load the module lazily (for 
performance reason)

This is an async process so if we add a decorator to a class property:

function inject(name) {
    return (target, key, descriptor) {
        // Note this returns a promise, not the actual property value
        descriptor.initializer = () => ioc.getComponent(name);
    }
}

class Hero {
    @inject('knife')
    weapon = null
      
    hit(enemy) {
        enemy.heath -= (this.weapon.power - enemy.defense);
    }
}

This code may not work, but nobody likes there injected properties to be all 
async getters and all code logics become unnecessarily complex by introducing 
so many async processes

How so we think of such common case, should I just make the ioc.getComponent 
sync without considerations to performance, or should I give up the decorator 
solution?

Thanks


Best regards

Gray Zhang
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to