将函数传递到Deferred's构造函数

Advantages/Disadvantages of Passing a Function into Deferred's Constructor

本文关键字:构造函数 Deferred 函数      更新时间:2023-09-26

在使用Deferred时,我看到了许多不同的使用组合。大多数都是一样的,但偶尔我会看到略有不同的。

例如。。。

通常,我看到这个
在这里,我们仅使用Deferred。

// 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出现任何问题。所以,我在这里寻找真正的见解。

改做第二个有好处吗?

不,除非你喜欢违背承诺的回调。


这是对构造函数的错误使用吗?

没有。jQuery deffered doc

jQuery.Deferred([beforeStart])

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

这种做法会造成我还没看到的问题吗?

不,它不会,除非您打算在其他地方使用myClass,这是不可能的,因为它是在回调中定义的。

结论:

归根结底,这更多的是个人偏好。老实说,解决方案1似乎更干净。