Разрешение отложенной функции - PullRequest
3 голосов
/ 27 июля 2011

Вот моя ситуация:

У меня есть «интерфейс», который каждый из моих элементов управления использует для базовых вещей, одной из этих вещей является проверка.

Итак, у меня есть функция processValidation, которая проходит через каждую из переданных функций для этого конкретного элемента управления.Эти функции могут быть такими же простыми, как isNumeric() или более сложными, требующими вызова веб-службы.Эти функции возвращают простое 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 Ответ

3 голосов
/ 27 июля 2011

Я не совсем уверен в вашем потоке, но почему бы не позволить 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

...