Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否需要将jQuery.when用于单个延迟对象?_Jquery_Jquery Deferred - Fatal编程技术网

是否需要将jQuery.when用于单个延迟对象?

是否需要将jQuery.when用于单个延迟对象?,jquery,jquery-deferred,Jquery,Jquery Deferred,假设您拥有以下代码: function someProcess() { var deferred = $.Deferred(); apiCall(function (recvData) { deferred.resolveWith(null, [recvData]); }); return deferred.promise(); } function mainFunction() { $.when(someProcess())

假设您拥有以下代码:

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

    apiCall(function (recvData) {
        deferred.resolveWith(null, [recvData]);
    });

    return deferred.promise();
}

function mainFunction() {
    $.when(someProcess())
        .then(someOtherProcess);
}
在这个例子中,我只需要等待一个延迟的问题得到解决。在这种情况下,按上述方式编写第二个函数与按以下方式编写函数有什么区别(如果有):

function mainFunction() {
    someProcess()
        .then(someOtherProcess);
}
我的意思是,我喜欢用第一种方式编写它,因为它清楚地表明我们正在使用jQuery延迟对象,但我很好奇在这种情况下是否有必要这样做

编辑:我修复了then()调用中的一个输入错误。谢谢你接电话


编辑:谢谢你的回答。我认为您已经抓住了我不确定的关于使用when()和使用原始jQuery延迟对象实例的要点。我再次修改代码,返回一个承诺,而不是整个延迟对象。我现在在实际代码中就是这样做的,只是忘了在这里添加它。

我没有使用自定义延迟对象,但我的理解是,您的示例中有两个不同之处:

  • 使用
    $.when()
    允许您任意添加更多延迟对象以由处理程序处理。显然,这没什么大不了的,因为您必须以任何一种方式更改代码行以添加更多延迟

  • $。when()
    仅获取承诺对象,而不是整个延迟对象,如果我理解正确,这是一个一致性度量,用于隐藏延迟对象的状态更改方法(例如
    resolve()
    ),仅公开处理程序挂钩和状态检查方法。这似乎是一个很好的实践,但在您的示例中,您可以通过调用
    someProcess().promise()
    而不是
    $。when(someProcess())
    来完成同样的事情


因此,我认为您是对的-这两种方法都可以工作,但使用
$的主要好处是()
使代码更清晰,并为其他程序员设置适当的期望值。使用
$.when()
延迟。promise()
将有助于防止一些能力较差的编码人员以令人困惑的方式干扰延迟处理的状态。

someOtherProcess()
应该是
someOtherProcess
。在第一种情况下,您立即调用该函数。@RobW我认为他应该立即调用它,如
$。当
期望函数返回延迟对象时,不是函数。@KevinB
someOtherProcess()
内,那么
,而不是
时。您是对的。我已经纠正了那个错误。只有when()函数使用deferred作为其参数,其他方法使用函数作为输入参数。谢谢。我非常同意你所说的一切,所以我将继续,让这个问题得到解决。我感谢你的意见。