延迟功能解析

时间:2011-07-27 18:08:45

标签: javascript jquery deferred

以下是我的情况:

我有一个“界面”,我的每个控件都用于基本的东西,其中一个是验证。

所以我有一个processValidation函数,它贯穿该特定控件的每个传入函数。这些函数可能像isNumeric()一样简单,也可能更复杂,需要进行Web服务调用。这些函数返回一个简单的boolean,说明这是否通过了验证。

我需要一种通用的方法让这个调用等待它运行完成的验证。我认为这是使用延迟方法的理想场所,但我似乎无法正确使用它。

这是我到目前为止所做的:

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

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

当我进入被调用的函数时,我需要一种方法来解析dfd。我猜这是我真正的问题。

思想?

修改 我尝试将dfd传递给validatorFn并在那里解析它,但$.when永远不会触发。

1 个答案:

答案 0 :(得分:3)

我不确定你的流量,但为什么不让validator.validatorFn返回延迟对象?类似的东西:

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

然后:

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

DEMO