繁体   English   中英

将函数传递给Deferred的构造函数的优缺点

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

在玩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的文档

jQuery.Deferred([beforeStart])

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

这种做法是否会引起我尚未见过的问题?

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

结论:

最后,这更多是个人喜好。 老实说,解决方案1看起来更干净。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM