javascript-angular js结合了异步和同步代码
作者:互联网
我正在使用角度资源模块来与我的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);
});
};
标签:angularjs,promise,angularjs-service,javascript,angular-promise 来源: https://codeday.me/bug/20191120/2041047.html