AngularJs承诺:你可以同时使用success和then
AngularJs promises: can you use both success and then?
我觉得这是一个非常糟糕的主意,因为我没有在任何地方找到它,但在我的本地主机上测试它似乎可以工作。我有一个服务:
angular
.module('trips.services')
.service('Trip', Trip);
function Trip($http, $q) {
//.....
function create(data) {
var api_url = "/api/trip";
return $http.post(api_url, data).success(function(data) {
mixpanel.track("Trip: created", {}); // track that a new event happened
});
}
}
我也有一个控制器,我做一些像:
Trip.create(data).success(function(data) {
//do something after the trip is created
})
现在你可以在这个例子中看到,我在服务中同时使用了then promise和success回调。如果我在调试器中设置断点,则首先执行来自服务的成功回调,然后执行来自控制器的then子句。这对于代码组织也很好,服务成功后我做的常见的事情是在服务中,而特定的事情是在控制器中。问题是,我觉得这是非常不符合任何文件或例子。其实不是在什么地方找到的,我是不小心发现的。在某些情况下也可能不起作用?我也知道其他的选择,$q库和可以在服务中有所不同,但最终会产生更多的代码。
那么,这是一个坏主意吗?为什么?任何意见都会很有帮助。我不想树立一个错误的做法。
因此使用promise被认为是一种很好的实践,正如您已经知道的那样。为此,您可以简单地将success
-回调替换为另一个then
:
function create(data) {
var api_url = "/api/trip";
var promise = $http.post(api_url, data);
promise.then(function(data) {
mixpanel.track("Trip: created", {}); // track that a new event happened
});
return promise;
}
在一个承诺上有多个独立的.then()
是完全好的,并且如您所期望的那样工作。
这并不是一个坏主意,只是你使用了承诺链。
.then
函数如下所示:
.then(function(success){}, function(error){});
可以看到,.success
只是上面第一个函数的简写(就好像没有声明错误回调一样)。
考虑到承诺可以被传递,或者你可能有多个服务发出相同的请求,而你只想创建一个承诺,那么你可能想要从多个区域声明回调,但只有一个承诺被解析。
所以这是个坏主意吗?不。为什么?这是一段灵活的代码,完全取决于程序员如何使用。你能声明多个吗?是的。你应该把它和成功回调混合在一起吗?你可以,但是为了保持一致性,你可能只想坚持一种风格。但这真的取决于你想要达到的目标。
Angular文档:https://docs.angularjs.org/api/ng/service/$http
(注意弃用,可能只想坚持使用。then)
相关文章:
- Javascript:If-then语句在函数中不起作用
- angularjs无法读取未定义的属性then
- Promise函数在.then之后未运行函数化
- AngularJs.调用$http.success中的jQuery函数
- 为什么$.when().pipe().then()有效,而$.when
- 如何在异步函数中正确使用Promise.all()和then()
- $resource上带有.then()函数的角度自定义方法导致错误
- 可以链接 '.then() 的返回响应,顺序与 '.then()' 的顺序不同
- AngularJS因果报应测试规范承诺未解析,且未调用.then()
- 在javascript promise中正确使用then
- 将数据从promise then方法传递到对象方法
- Angular Provider/JS-如何访问'叔叔方法'从$http().then()
- 当链接javascript承诺时,如何处理then()函数中的条件
- AngularJS:使用ng-show/hide动态维护下拉列表的3种状态(InProgress、Success、Err
- AngularJS http.jsonp请求.then和.success函数不起作用
- JS $.get Success rather then $.ajax
- jQuery .then() 和 success block 不能一起工作
- AngularJs承诺:你可以同时使用success和then
- 使用AngularJS创建一个动态表——从success/error方法到.then()方法需要帮助
- Jquery Form Submit, Async Call then Submit Form On Success