【问题标题】:Which is better .success() or .then() in angular哪个更好 .success() 或 .then() 角度
【发布时间】:2016-05-23 13:29:51
【问题描述】:

我正在对服务器进行 ajax 调用以获取一些数据。

$.ajax(
{
url: "myserver",
method: "GET",
}.success(function(data)
{ }
.error(function(e)
{ }
)

我一直在阅读.then()

使用 .then() 优于 .success() 有什么性能优势吗?

有什么特殊情况我应该使用 .then() 和 .success() 吗?

另外,无论谁回答,请简要介绍一下什么是 Promises。

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您应该使用then,因为successerror 已被弃用。

https://docs.angularjs.org/api/ng/service/$http

$http 遗留的 promise 方法成功和错误已经 已弃用。请改用标准 then 方法。如果 $httpProvider.useLegacyPromiseExtensions 设置为 false 然后这些 方法会抛出 $http/legacy 错误。

【讨论】:

  • 你能补充几行关于什么是 Promise
  • 查看 es6 文档 - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。它们是摆脱回调地狱的一种方法,允许您返回一个承诺并基本上链接.then(fn).then(fn).catch(errFn)
  • 不要引用我的话,但我的猜测是 .success() 比 Promise 更快,因为您只是调用回调函数。而在创建 Promise 时,会创建一个新的 Promise 实例,然后调用该函数。但实际上您不太可能注意到差异。
【解决方案2】:

.then( ) 调用返回一个承诺,而 .success( ) 是注册回调的更传统方式,它不返回一个承诺。

此外,.then() 通常用于需要链接承诺的地方,而 .success() 方法是一种简化的、方便的方法,当你不需要链接调用或使用承诺 API 时。

【讨论】:

  • 有什么这样的吗,.success() 比 .then() 更快,或者什么都没有?
  • 不,不是那样的。此外,我看到很多教程建议我们使用 .then() 而不是 .success()。请阅读此文档syntaxsuccess.com/viewarticle/…
  • jQuery 的ajax() 方法返回他们自己的对象jqXHR,并且每次调用成功之类的方法,然后,总是会继续返回jqXHR 对象,这意味着您可以继续像success().then() 一样链接
  • 对于 Angular 的 HttpPromise success() 确实返回了一个承诺,最初创建的承诺 .then 虽然返回了一个新的承诺
【解决方案3】:

我建议使用.then().catch()。这些方法符合CommonJS 标准。当您使用其他 Promise 库时,它们更有可能使用这两种方法。

我也会避免使用.then(successCallback, failureCallback) 方法,因为它不标准且不太明显。

【讨论】:

  • catch(cb) 只是 then(null, cb) 的简写
【解决方案4】:

这是一篇帮助你理解 Promise 的好文章

http://andyshora.com/promises-angularjs-explained-as-cartoon.html

两者之间的主要区别在于.then() 调用返回一个promise(通过回调返回的值解析),而.success() 是更传统的注册回调方式并且不返回promise。

【讨论】:

    【解决方案5】:

    我个人更喜欢.then()here 是一个非常好的博客,说明为什么不首选.success()

    对于 API 调用,我会这样做:

    $http.get('www.domain.com/someAPI').then(function (results) {
        // On successful promise
        doSomethingHere();
    }, function (error) {
        // On failed promise
        handleError();
    });
    

    【讨论】:

      【解决方案6】:

      .Success 和 .then 的工作方式相同,但响应单元之间存在很大差异,在晚上事情完成后,角度和 ajax 成功的工作方式相同,您可能需要获取响应数据,然后是 User .success,

      在 .then 中,它发生在 .Success 之前和 .Success 之后。 因此,如果您的 html 代码中有加载栏,请在成功之前使用 .then 进行加载... 成功后使用 .then 隐藏它。

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2013-03-16
        • 1970-01-01
        • 2011-02-22
        • 2013-06-06
        • 2013-11-02
        相关资源
        最近更新 更多