Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

inject error handling problem when callback provided #18

Open
luctorQ opened this issue Aug 4, 2015 · 0 comments
Open

inject error handling problem when callback provided #18

luctorQ opened this issue Aug 4, 2015 · 0 comments

Comments

@luctorQ
Copy link

luctorQ commented Aug 4, 2015

When inject with callback is invoked there is problem with error handling ex. I have

var ioc = require('../index')
    .setSettings(
    {
        log: {
            output: 'consoleReadable'
        }
    })
    .getContainer()
    .registerInjectable({
        module1: function () {
            return 'module1'
        },
        module2: function () {
            return 'module2'
        }
    });

then i have 2 cases

1 scenario: inject error without callback

ioc.inject(function(module1,module3){
    return module1+'/'+module3
})

output is like this:
FATAL (resolver) Cannot resolve dependencies for anonymous function: {"message":"Component unresolvable","context":{"name":"module3","errors":[{"problemType":"notRegistered"}]}}
cool works as expected

2 scenario: injecterror with callback

ioc.inject(function (module1, module3) {
    return module1 + '/' + module3
}, function cb(err, instance) {
    console.error(err)
})

output from this case is like this:

C:\_projects\simple-ioc\lib\containerHelpers\resolver.js:22
                                return resolvedNonReservedDependencies[ dependency.name ];
                                                                      ^
TypeError: Cannot read property 'module1' of undefined
    at C:\_projects\simple-ioc\lib\containerHelpers\resolver.js:22:43
    at Array.map (native)
    at Object.pub.resolveInjectableComponent (C:\_projects\simple-ioc\lib\containerHelpers\resolver.js:20:83)
    at C:\_projects\simple-ioc\lib\containerHelpers\resolver.js:62:9
    at Immediate.<anonymous> (C:\_projects\simple-ioc\lib\genericHelpers\errRerouter.js:5:5)
    at Immediate.immediate._onImmediate (timers.js:409:16)
    at processImmediate [as _immediateCallback] (timers.js:358:17)

it's no good because framework reports some problem with module 1 that is perfectly correct and no mention about module3

i think that in resolver.js code there is no need to check if callback exists it is good enough to check error and log it fatal if something goes wrong

pub.inject = function( store, fn, parentName, callback ) {
        var component = injectableComponent.get( fn );
        resolveDependencies( store, 'anonymousFunction', component.dependencies.nonReserved, function( err, resolvedNonReservedDependencies ) {
            if( err && !callback )
                log.fatal( 'Cannot resolve dependencies for anonymous function', err );
            else
                pub.resolveInjectableComponent( parentName, component, resolvedNonReservedDependencies, function( err, instance ) {
                    if( callback )
                        callback( err, instance );
                } );
        } );
    };

change like below fix problem

(...)
    if( err)
                log.fatal( 'Cannot resolve dependencies for anonymous function', err );
            else
                pub.resolveInjectableComponent( parentName, component,
(...)

please consider this fix and btw Can You publish newest version to npm registry? I see only 3.0.16

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant