我正在使用角度资源模块来与我的restfull Web服务器一起工作.例如,我有一个返回10个元素的数组的方法,而我想做的就是将结果保存到一些称为books的javascript变量中(不在角度范围内).
function getBooks(user_id) {
var books = [];
BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
angular.forEach(result, function(i) {
books.push(i);
});
});
return books;
}
假设BookFactory.getBooks.query可以正常工作,并且确实返回10个元素.
因此,此函数内部有一个简单的逻辑,我只需将每个元素推入数组书即可.
我也有一个测试功能,用于测试getBooks()函数.这里是:
$scope.testGetBooksMethod = function (user_id) {
var resut = getBooks(user_id);
alert(resut.length);
};
警报中的结果将始终为0.我知道这部分代码:
BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
angular.forEach(result, function(i) {
books.push(i);
});
});
异步工作,直到服务器请求得到处理,函数getBooks()返回一个空书本数组(如果我错了,请纠正我).
这是一个问题,我该如何编辑我的功能以使其正常工作.我想从休息中获取数据,用这些数据填充数组书,然后将其返回.
提前致谢.
解决方法:
您需要在此处使用Promise概念,控制器功能的testGetBooksMethod将等到服务方法的getBooks完成其调用.为此,您需要从getBooks函数返回BookFactory.getBooks.query promise.数据检索后,将创建和创建书籍.将从getBooks方法返回.在调用getBooks方法时,您需要使用.then函数,该函数将继续执行链承诺事件,当从getBooks返回数据时,该then函数将获取从您的服务返回的数据.
function getBooks(user_id) {
var books = [];
return BookFactory.getBooks.query({ id: user_id }).$promise.then(function (result) {
angular.forEach(result, function(i) {
books.push(i);
});
return books;
});
}
控制者
$scope.testGetBooksMethod = function (user_id) {
getBooks(user_id).then(function(resut){
alert(resut.length);
});
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。