开发者

Deferred function resolution

开发者 https://www.devze.com 2023-03-23 20:59 出处:网络
Here is my situation: I have an \"interface\" that each of my controls use for basic things, one of those things is validation.

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 r开发者_运维问答eal problem.

Thoughts?

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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消