Factory - Then and Catch Promise Chaining in AngularJS
Factory - Then and Catch Promise Chaining in AngularJS
当在工厂内连锁承诺或将其移交给控制器时,我遇到了这个棘手的场景。
同样的几个问题:
- 哪一个是有益的?在工厂函数或控制器中写入然后和捕获
- 业务场景
- 性能优势
早些时候,我曾在一个工厂方法中这样写then和catch链接:
function searchReservations(lastName, arrivalDate)
{
// alert(lastName + ' ' + arrivalDate)
return $http({
method: 'GET',
url: baseUrl + '/reservation?lastName='+lastName+'&arrivalDate='+arrivalDate
})
**.then(success)
.catch(failure);**
function success(response) {
return response;
}
function failure(error) {
console.log('XHR Failed for searchReservation' + error.data);
return error;
}
}
但作为一种新的趋势,我看到了当时和catch都写在控制器函数中。有点像这样。
HRS.searchReservations(this.searchLastName, arrivalDate).then(function(response) {
...
}).catch(function(response){
...
})
更具体地说,关于商业案例和性能优势,我想知道这里的区别。
谢谢,Ankit
我使用第一个。我发现它更干净,更容易阅读,并允许你命名你的方法,使它们更加清晰。
在服务中,我的成功和错误函数将响应数据转换为我的控制器将使用的视图模型格式。
然后,在我的控制器中,我还有一个成功与错误函数,用于以有意义的方式显示输出。但控制器只对数据的显示感兴趣,服务在其中处理任何转换、localStorage等。
此外,如果您的服务中有一个失败方法,如果您希望它触发控制器的catch函数,则需要return $q.reject(error)
。
附带说明,您可以使用params: ...
轻松干净地将查询参数附加到您的url:
{
method: 'GET',
url: baseUrl + '/reservation',
params: {
lastName: lastName,
arrivalDate: arrivalDate
}
}
我喜欢如何构建服务方法:
function searchReservations (lastName, arrivalDate) {
var config = {
method: 'GET',
url: baseUrl + '/reservation',
params: {
lastName: lastName,
arrivalDate: arrivalDate
}
};
return $http(config).then(success).catch(error);
////////////
function success (response) {
return response;
}
function error (response) {
console.log('XHR Failed for searchReservation' + response.data);
return $q.reject(response);
}
}
注意,在这种情况下,您甚至不需要success
方法,因为它什么都不做,所以您可以像这样完全跳过它:return $http(config).catch(error)
。控制器上的任何.then(...)
仍将被触发。
相关文章:
- Node.js's Buffer.writeFloatBE in Javascript
- Setting default onclick behavior for <img> tag in gene
- Lucene Search in Alfresco
- grep in JQuery to C#
- write HTML in JavaScript
- jQuery setTimeOut: in for-loop
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- HTMLInputElement in IE7
- Mongodb$in以与数组中相同的顺序获取结果
- element.dataset in Internet Explorer
- jQuery parent() in table
- Instagram oauth flow in angularjs
- In循环的In运算符前后
- 如何使用for in循环在javascript中显示对象中的对象
- Jquery change onchange in onload
- 重构 jQuery in JS 问题
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- JavaScript: Promise chaining in foreach loop
- Factory - Then and Catch Promise Chaining in AngularJS