angular js结合了异步和同步代码
angular js combine asynchronous and synchronous code
我正在使用angular resource
模块来处理我的restfull Web服务器。例如,我有一个方法,它返回一个由10个元素组成的数组,我想做的只是将结果保存到一个名为books
的javascript变量(不在angular scope中(中。
所以我写了一个简单的方法,看起来像这样:
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个元素。因此,这个函数中有一个简单的逻辑,我只需将每个元素推送到数组books中。
此外,我还有一个测试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()
返回一个空的图书数组(如果我错了,请纠正我(。
这里有一个问题,我如何编辑我的函数,使其正确工作。我想从rest中获取数据,用这个数据填充数组books
,然后返回它
提前谢谢。
我想从rest中获取数据,用这些数据填充数组簿,然后返回。
事情就是这样。异步编程实际上与同步编程并不兼容。所以你不能把它们组合在一起。然而,您可以以类似的同步方式工作,这就是promise非常强大的地方。您不返回data
,而是返回有状态的Promise对象。
因此,与其返回books
,不如为这本书返回Promise:
function getBooks(user_id) {
return BookFactory.getBooks.query({ id: user_id }).$promise;
}
然后在使用代码时,您将使用这个具有底层状态控制机制的包装器对象,该机制将在书籍加载并可用时继续:
$scope.testGetBooksMethod = function (user_id) {
getBooks(user_id).then(function(books) {
alert(books.length);
});
};
这里需要使用promise概念,控制器函数的testGetBooksMethod
将等待服务方法的getBooks
完成其调用。为此,您需要从getBooks
函数返回BookFactory.getBooks.query
promise。在数据得到检索后,书籍将被创建&将从CCD_ 12方法返回。在调用getBooks
方法时,您需要使用.then
函数来继续链承诺的事情,当从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;
});
}
控制器
$scope.testGetBooksMethod = function (user_id) {
getBooks(user_id).then(function(resut){
alert(resut.length);
});
};
- 使用模态库从嵌套的异步调用中生成javascript同步代码
- 用Javascript承诺包装同步代码有什么好处吗
- Node.js&两个请求之间的Express/Can上下文切换可以是同步代码
- Promise处理程序中的同步代码
- 基准测试引发错误的异步与同步代码
- Javascript:同步代码
- 使用 co 和来自同步代码的承诺(mongoDB 示例)
- 同步代码框 - 调用 API - 解析 JSON - 获取引用 - 保存新对象
- 以编程方式将同步代码转换为异步代码
- 在 JavaScript 中同步代码
- 想要一些关于异步javascript代码与同步代码的说明
- 同步代码
- 使用grunt-contrib-watch对两个目录进行深度的单向同步.代码可以工作,但是grunt-contrib-w
- JavaScript:将同步代码改为异步,以支持IE8
- Nodejs -锁,键和工作者- javascript世界中的同步代码和等待
- 如何使一些同步代码先于其他异步代码运行
- javascript中的同步代码
- 在电子应用程序开发过程中同步代码更改
- 在量角器中以相同的描述执行异步和同步代码
- Javascript在选项卡之间同步代码执行