Преимущества / недостатки передачи функции в конструктор Deferred

Играя с Deferred's, я вижу много разных комбинаций использования. Большинство из них одинаковы, но иногда я вижу те, которые немного отличаются.

НАПРИМЕР...

НОРМАЛЬНО, ЭТО ВИДЕТЬ
Здесь мы просто используем отложенное.

// NORMALLY I SEE THIS...
function doSomething(){

    var deferred = $.Deferred();
    var myClass = new MyClass();

    myClass.doSomething(function () {
        deferred.resolve();
    });

    return deferred.promise();
};

СЛУЧАЙНО, ЭТО ВИДЕТЬ
Здесь мы передаем функцию в конструктор Deferred... затем используем ее.

// SOMETIMES I SEE THIS...
function doSomething() {

    var deferred = $.Deferred(function (deferred) {

        //Q: Is there an advantage to doing this instead?
        //Q: Is this a mis-use?
        var myClass = new MyClass();

        myClass.doSomething(function () {
            deferred.resolve();
        });
    });

    return deferred.promise();
};

МОЙ ВОПРОС:

  • Есть ли преимущество в том, чтобы делать 2-й вместо этого?
  • Это неправильное использование конструктора?
  • Эта практика создает проблему, которую я еще не видел?

Я еще не видел каких-либо проблем, возникающих из метода 2. Итак, я ищу реальное понимание здесь.

1 ответ

Решение

Есть ли преимущество в том, чтобы делать 2-й вместо этого?

Нет, если вам не нравятся обратные вызовы, которые побеждают цель обещаний.


Это неправильное использование конструктора?

Нету. JQuery отложенный документ

jQuery.Deferred( [beforeStart ])

beforeStart
Type: Function( Deferred deferred )
A function that is called just before the constructor returns.

Эта практика создает проблему, которую я еще не видел?

Нет, это не так, если вы не собираетесь использовать myClass где-то еще, что будет невозможно, так как это определено в вашем обратном вызове.

Заключение:

В конце концов, это скорее личное предпочтение. Решение 1 кажется более чистым, если честно.

Другие вопросы по тегам