Настройка отложенного / обещания для разных свойств объекта

0

используя jquery 1.6. *

Я использую модульный шаблон. Я хочу, чтобы иметь возможность создавать и разрешать дефисы в моем "UNI.obj1" и иметь возможность использовать их, чтобы я мог инициировать поведение в моем объекте "UNI.obj2".

Допустим, у меня есть следующий объект:

var UNI = {};

UNI.obj1 = function() {
    // set up a deferred here;

    var method1 = function(){
       // RESOLVE deferred here

    }
    var method1A = function(){
        window.onload = function(){ 
            method1(); 
        }
    }()
}()

UNI.obj2 = function(o) {
    var method2 = function(){
       // Use the PROMISE of the resolve here

    }
}(UNI.obj1);
  • 0
    Я бы предложил обновить до jQuery 1.8+, если вы хотите использовать отложенные объекты jQuery.
  • 0
    Можете ли вы немного расширить свой код? как таковой, он относительно бесполезен, потому что method2 и method1 никогда не выполняются и не могут быть выполнены. Я бы предпочел посмотреть, как вы будете использовать код, а не пытаться манипулировать им, чтобы он выполнялся.
Показать ещё 6 комментариев
Теги:

2 ответа

1
Лучший ответ

Определите свой отложенный объект и верните его обещание, затем действуйте на него.

var UNI = {};

UNI.obj1 = function () {
    // set up a deferred here;
    var def = $.Deferred();

    var method1 = function () {
        // RESOLVE deferred here
        def.resolve();

        return def.promise();
    }
    var method1A = function () {
        window.onload = function () {
            method1();
        }
    }()
    return def.promise();
}

UNI.obj2 = function (o) {
    var method2 = function () {
        // Use the PROMISE of the resolve here
        o().done(function () {
            // it was resolved!
            console.log("Resolved!");
        });
    }()
}(UNI.obj1);
  • 0
    Я нахожу трудным следовать var foo = function () {}() . Это на самом деле не имеет смысла, потому что вы получите foo равное undefined если foo ничего не вернул. Например, method1A не определен. Это, возможно, хорошо, вместо этого было Iife. (function(){}())
1
var UNI = {};

UNI.obj1 = function() {
    // set up a deferred here;
    var deferred = new $.Deferred();

    var method1 = function(){
       // RESOLVE deferred here
       deferred.resolve('something')
    }
}

UNI.obj2 = function(o) {
    var method2 = function(promise){
       // Use the PROMISE of the DEFERRED? here
       // pass promise
    }
}

Но я не вижу в вашем вопросе, как вы хотите передать отложенный объект, так как вы сказали, что хотите шаблон модуля, вы могли бы:

UNI.obj1 = function() {
    // set up a deferred here;
    var deferred = new $.Deferred();

    var method1 = function(){
       // RESOLVE deferred here
       deferred.resolve('something')
    }

    // module pattern
    return {
      promise: deferred.promise()
    };
    // you could also just return the promise, maybe I am misunderstanding your question
    // return deferred.promise();
}

UNI.obj2 = function(o) {
    var method2 = function(promise){
       // Use the PROMISE of the DEFERRED? here
       // pass promise
    }

    // module pattern
    return {method2: method2};
}


// Usage
var o1 = UNI.obj1();
var o2 = UNI.obj2();
o2.method2(o1.promise);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню