我正在使用angular resource
modul与我的restfull Web服务器一起工作。例如,我有一个返回10个元素的数组的方法,我想做的就是将结果保存到称为books
的一些JavaScript变量中(不在 Angular 范围内)。
所以我写了一个简单的方法,看起来像这样:
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()
返回一个空书本数组(如果我错了,请纠正我)。这是一个问题,我该如何编辑我的功能以使其正常工作。我想从休息中获取数据,用此数据填充
books
数组,然后将其返回。提前致谢。
最佳答案
您需要在此处使用Promise概念, Controller 功能的testGetBooksMethod
将等到服务方法的getBooks
完成其调用。为此,您需要从BookFactory.getBooks.query
函数返回getBooks
promise 。检索数据后,将创建书籍并从getBooks
方法返回。在调用getBooks
方法时,您需要使用.then
函数,该函数将继续执行链 promise ,当从getBooks
返回数据时,此函数将获取您的服务返回的数据。
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;
});
}
Controller
$scope.testGetBooksMethod = function (user_id) {
getBooks(user_id).then(function(resut){
alert(resut.length);
});
};
关于javascript - angular js结合了异步和同步代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31228559/