Sam*_*tar 1 javascript angularjs
我有类似下面的getData函数的函数.
我知道$ http会返回一个承诺.在我目前的设置中,我使用$ q以便我可以对结果进行一些处理,然后返回另一个承诺:
var getData = function (controller) {
var defer = $q.defer();
$http.get('/api/' + controller + '/GetData')
.success(function (data) {
var dataPlus = [{ id: 0, name: '*' }].concat(data);
defer.resolve({
data: data,
dataPlus: dataPlus
});
})
.error(function (error) {
defer.reject({
data: error
});
});
return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以做到这一点,而无需使用AngularJS $ q(或任何其他$ q实现)或上面的代码是唯一的方法吗?请注意,我不是在寻找一个解决方案,我将onSuccess和onError传递给getData作为参数.
谢谢
正如你所说,$http.get已经回复了一个承诺.有关承诺的最好的事情之一是它们很好地构成.添加更多success,then或者done只是按顺序运行它们.
var getData = function (controller) {
return $http.get('/api/' + controller + '/GetData')
.success(function (data) {
var dataPlus = [{ id: 0, name: '*' }].concat(data);
return {
data: data,
dataPlus: dataPlus
};
})
.error(function (error) {
return {
data: error
};
});
}
Run Code Online (Sandbox Code Playgroud)
这意味着使用getData(controller).then(function (obj) { console.log(obj) });,将打印成功处理程序返回的对象.
如果您愿意,可以继续编写它,添加更多功能.假设您希望始终记录结果和错误.
var loggingGetData = getData(controller).then(function (obj) {
console.log(obj);
return obj;
}, function (err) {
console.log(err);
return err;
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以getData像这样使用您的日志记录:
loggingGetData(controller).then(function (obj) {
var data = obj.data;
var dataPlus = obj.dataPlus;
// do stuff with the results from the http request
});
Run Code Online (Sandbox Code Playgroud)
如果$http请求结算,结果将首先通过您的初始成功处理程序,然后通过日志记录,最后到达最终函数.
如果它没有解析,它将通过初始错误处理程序到由定义的错误处理程序loggingGetData并打印到控制台.你可以继续以这种方式添加promises并构建非常先进的东西.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |