【问题标题】:When to return a jQuery function as opposed to just calling it?什么时候返回一个 jQuery 函数而不是仅仅调用它?
【发布时间】:2013-12-05 17:07:16
【问题描述】:

我一直在阅读有关排队 JS 回调而不将它们堆叠在这里的信息, How do I animate in jQuery without stacking callbacks?

我尝试过 Julian Aubourg 的回答,我注意到在从函数中删除“return”语句后,一切都会立即发生。

我只是想知道这些返回语句的行为是什么,以及它们在使这段代码同步方面扮演什么角色。

    $('div1').fadeOut('slow').promise().pipe(function() {
        return $('div2').fadeOut('slow');
    }).pipe(function() {
        return $('div3').animate({ top: 500 }, 1000 );
    });

【问题讨论】:

  • 仅供参考,.pipe() 已弃用。但您的问题与其说是关于 JavaScript 语言,不如说是关于 jQuery 定义的特定 API。
  • @BlueSkies 实际上 - 他的问题更多是关于一般承诺,但不是同意的。
  • 作为旁注,pipe()then() 替换
  • documentation 的重要部分是:“这些过滤器函数可以返回 [...] 另一个可观察对象(Deferred、Promise 等),它将通过其已解决/拒绝状态和管道承诺回调的值。”
  • @BlueSkies 这就是我所说的 "promises in general" 的意思,jQuery 遵循规范,这个问题是关于该规范的 - 尽管就像你建议的那样 - 它包含已弃用的 pipe 而不是规范then.

标签: javascript jquery callback


【解决方案1】:

所有的 jQuery 动画现在都返回它们自己的 promise,所以基本上你返回的 promise 会在动画完成时被解析:

return $('div2').fadeOut('slow');

相当于

var def = new $.Deferred();
$('div2').fadeOut('slow', function() {
    def.resolve();
});
return def.promise();

【讨论】:

  • 值得一提 - 当你从一个承诺中返回任何不是承诺的东西时 - 它会立即用该值解决(比如在你没有明确返回的情况下,它返回 undefined . 如果你返回一个 Promise,它会在返回的 Promise 解决时解决。
  • @BenjaminGruenbaum - 好点,这当然是它与 return 语句一起使用的原因,而不是没有它。
  • 谢谢!我似乎找不到任何关于此的文档。你是怎么知道的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
相关资源
最近更新 更多