2016-05-23 50 views
0

我正在进行ajax调用服务器来获取一些数据。哪个更好.success()或.then()角

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

我一直在阅读有关。那么()

使用.then()而不是.success()会有什么性能优势吗?

是否有任何特定的场景,我应该使用.then()和.success()?

另外,无论谁回答,请简单介绍一下什么是承诺。

+1

的可能的复制[角$ HTTP服务 - 成功(),误差(),则()方法(HTTP://计算器。com/questions/27287731/angular-http-service-success-error-then-methods) –

+1

@ItaloAyres他实际上在问'$ .ajax'和promises之间的区别。这个问题还有更多。 – Archer

回答

1

我会推荐使用.then().catch()。这些方法符合CommonJS标准。在使用其他Promise库时,他们更可能会使用这两种方法。

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

+0

'catch(cb)'只是'then(null,cb)'速记 –

2

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

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

的$ HTTP遗留承诺的方法成功和错误已经 弃用。改为使用标准然后方法。如果 $ httpProvider.useLegacyPromiseExtensions设置为false,那么这些 方法将抛出$ http/legacy错误。

+0

请问您可以添加几行有关Promise的内容 –

+0

查看es6文档 - https://developer.mozilla.org/en -US /文档/网络/的JavaScript /参考/ Global_Objects /无极。他们是退出Callback Hell的一种方法,允许你返回一个承诺,并基本上链接'.then(fn).then(fn).catch(errFn)' –

+1

不要引用这个,但我的猜测会是因为你只是调用一个回调函数,'.success()'比承诺更快。创建承诺时创建一个新的Promise实例,然后调用该函数。但实际上你不可能注意到这种差异。 –

1

这是一个伟大的文章,帮助你了解无极

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

2之间的主要区别是,.then()调用返回一个承诺(与返回的值解析从回调)而.success()是更传统的注册回调方式,并没有返回一个承诺。而.success()是注册的回调更传统的方式,并没有返回一个承诺

2

。那么()调用返回的承诺。另外.then()通常用于需要链接promise的地方,而.success()方法是一种流线型的便捷方法,当您不需要链接调用或使用promise API时。

+0

是否有任何这样的,.success()比.then()更快或没有这样的? –

+1

不,没有那样。另外我看过很多教程建议我们使用.then()而不是.success()。请阅读本文档http://www.syntaxsuccess.com/viewarticle/angular-promises% E2%80%93然后成功 –

+0

jQuery的'ajax()'方法返回它们自己的对象'jqXHR',并且每次调用成功的方法,然后总是会继续返回'jqXHR'对象,这意味着你可以继续链接像'success()。then()' –

0

我个人比较喜欢.then(),here是为什么.success()不是首选的博客。

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

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