AngularJS: promises,你能在使用.then()之后传递一个promise吗?
AngularJS : promises, can you pass a promise back after using .then()?
我仍然是Angular和promises的新手,所以我希望我在这里有正确的想法。
我现在有一个数据层服务,它使用reangular来获取一些数据,然后返回一个承诺,像这样…
dataStore.getUsers = function (params) {
return users.getList(params);
};
然后,我的控制器调用这个函数收到一个承诺返回,像这样…
$dataStore.getUsers(params).then(function (response) {
$scope.users = response;
}, function(response) {
$log.error("Get users returned an error: ", response);
});
这工作得很好,但我想在传递它之前使用我的数据存储中的承诺。我想使用。then()方法来检查它是否失败并做一些日志记录,然后,从成功函数和失败函数中,我想将原始承诺返回给我的控制器。
我的控制器将能够使用。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;
});
};
在您的伪代码中,您实际上一点也不差。承诺链:
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);
});
};
控制器现在以相同的值被解析/拒绝。日志要求访问承诺,因此您必须添加一个.then
处理程序来处理它。其他promise库对此也有令人信服的方法,但$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;
});
};
相关文章:
- 多次调用promise函数,直到另一个promise函数满足条件
- 我可以克隆一个Promise吗
- 如何访问AngularJS promise链中上一个promise的结果
- Ember.js:路由返回多个模型,包括一个promise,给出错误
- jasmine测试函数,返回一个promise
- 一个指令,在图像完全渲染后返回一个promise
- 传递一个promise的返回值作为另一个的参数
- AngluarJS Protractor测试:函数应该返回一个promise
- 当一个promise的resolve回调返回另一个promise时,它是如何工作的
- 为什么,如果“$q.all”没有返回一个promise数组,则是一个未抛出的异常
- 是否可以将多个错误处理程序附加到一个promise
- Complex Q promise:一个promise创建了一个其他promise的数组
- 在promise .race中第一个promise被解析(拒绝)后执行是否结束
- Angularjs: chain promises返回一个promise而不是一个对象
- 重复一个Promise,直到它没有被拒绝或超时为止
- 为什么当getCurrenUlr()返回一个' Promise
'时,TypeScript抱怨参数有隐式 - 承诺.当一个promise失败时,All不会触发catch()阻塞
- 让构造函数返回一个Promise是不是不好的做法?
- vue-resource返回一个promise对象
- 清除函数名,表明它将返回一个Promise (JavaScript)