Mike Fielden
Mike Fielden

Reputation: 10153

Deferred function resolution

Here is my situation:

I have an "interface" that each of my controls use for basic things, one of those things is validation.

So I have a processValidation function which runs through each of the passed in functions for that particular control. Those functions might be as simple as isNumeric() or more complex requiring a webservice call. These functions return a simple boolean stating whether or not this passed validation.

I need a generic way to have this call wait until that validation it is running finishes. I thought this was a perfect place for using Deferred methods, but I can't seem to get it right.

Here is what I have so far:

var dfd = $.Deferred(function (dfd) {
            validator.validatorFn(value, $controlContainer);
        }).promise();

        $.when(dfd).done(function (result) {
            console.log('got here');
        });

When I get into the function being called I need a way to resolve the dfd. I guess that is my real problem.

Thoughts?

EDIT: I tried passing dfd to the validatorFn and resolving it there but the $.when never fires.

Upvotes: 3

Views: 243

Answers (1)

Felix Kling
Felix Kling

Reputation: 816442

I'm not really sure about your flow, but why not let validator.validatorFn return the deferred object? Something like:

validator.validatorFn = function(value, controlContainer) {
     var df = $.Deferred();
     // do validation
     // somewhere you call
     df.resolve(result);
     // or maybe df.reject(result);
     return df;
};

Then:

$.when(validator.validatorFn(value, controlContainer)).done(function (result) {
    console.log('got here');
});

DEMO

Upvotes: 3

Related Questions