jon*_*bbs 4 javascript promise angularjs restangular angular-promise
我还是Angular的新手并承诺所以我希望我在这里有正确的想法.
我目前有一个数据层服务,它使用restangular来获取一些数据,然后返回一个promise,就像这样......
dataStore.getUsers = function (params) {
return users.getList(params);
};
Run Code Online (Sandbox Code Playgroud)
然后,我调用此函数的控制器会收到一个承诺,就像这样......
$dataStore.getUsers(params).then(function (response) {
$scope.users = response;
}, function(response) {
$log.error("Get users returned an error: ", response);
});
Run Code Online (Sandbox Code Playgroud)
这很好用,但我想在传回数据存储之前使用我的数据存储区内的promise.我想使用.then()方法检查它是否失败并进行一些日志记录,然后,从sucess函数和失败函数我想将原始的promise返回给我的控制器.
然后,我的控制器可以像现在一样使用.then()方法,事实上,我不希望我的控制器代码完全改变,只是我的数据存储区代码.
这里有一些半伪代码来显示我想要的数据存储功能...
dataStore.getUsers = function (params) {
users.getList(params).then(function (response) {
$log("server responded")
return original promise;
}, function(response) {
$log.error("server did not respond");
return original promise;
});
};
Run Code Online (Sandbox Code Playgroud)
你的伪代码实际上并不遥远.承诺链:
dataStore.getUsers = function (params) {
return users.getList(params).then(function (response) {
$log("server responded")
return response;
}, function(failure) {
$log.error("server did not respond");
// change to throw if you want Angular lever logs
return $q.reject(failure);
});
};
Run Code Online (Sandbox Code Playgroud)
控制器现在以相同的值被解析/拒绝.日志需要访问promise,因此您必须添加.then处理程序来处理它.其他承诺库有相同的方法,但在这方面$ q是简约的.
或者,您可以使用更好的catch语法,并将错误传播到日志:
dataStore.getUsers = function (params) {
return users.getList(params).then(function (response) {
$log("server responded")
return response;
}).catch(function(failure) {
$log.error("server did not respond");
throw failure;
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |