AngularJS:如何使用Angular承诺
AngularJS : How to work with Angular Promises
我有一个函数,它调用rest服务,我想用它从返回的数据填充一个数组。Angular返回一个Promise,我不知道如何使用Promise中的数据来填充数组。
我的函数:
$scope.save= function(){
var duplicateNames= [];
for(var i=0; i < ids.length; i++){
var id= "bns-" + i;
var aName= document.getElementById(id).value;
var responsePromise= $http.get("/rest/v1/names/" + aName + "/");
responsePromise.success(function(data, status, headers, config) {
if(data.name.length > 0)
duplicateNames.push(data.name);
});
}
console.log(duplicateNames);
rest调用返回数据,如果"aName"存在,那么我想在数组中跟踪它。我如何"暂停"执行,使数组"duplicateNames"将有"aName"添加到它?
你不能暂停执行,承诺的全部意义在于它异步执行。也就是说,在处理http请求时,代码继续执行。一旦http请求返回结果,就会调用success
函数。在这个示例中,console.log
语句在responsePromise.success
函数之前执行。如果将日志语句移动到success函数中,您将看到预期的结果。
在您的示例中,duplicatNames
数组不是当前$作用域的模型,因此它的值有限,正如您已经发现的那样—当函数退出时数组的值不是您感兴趣的值。但是,如果您通过将数组附加到控制器的$scope
使其成为模型,则可以使用双向绑定或$watch
语句对更新后的值执行操作。
基本上,你需要开始异步思考,并理解HTTP请求另一端的处理可能会花费你需要考虑的时间。有很多关于学习angular承诺的资源,这里有4:
- https://docs.angularjs.org/api/ng/service/美元q AngularJS:在哪里使用承诺?
- http://lostechies.com/gabrielschenker/2014/02/04/angularjspart-11-promises/
- http://liamkaufman.com/blog/2013/09/09/using-angularjs-promises/
相关文章:
- 如何判断请求/承诺是否需要超过5秒才能完成,angular js
- Angular $q承诺使用摩卡,柴,西农进行单元测试
- 失败绑定 Angular 承诺$scope变化
- 连锁Angular承诺拒绝
- 混合$q和ES6时测试Angular承诺
- 使用'完成'而不是'成功'Angular承诺
- AngularJS:如何使用Angular承诺
- 终止Angular承诺的执行
- angular承诺对象之间的区别
- 处理已解析/被拒绝的Angular承诺
- Angular承诺' all '方法返回' undefined '
- Angular $q承诺和非线性链
- Angular承诺返回__proto__
- angular承诺的解析顺序和它们发送的顺序一样吗?
- Angular承诺:拦截“然后”
- 动态添加内容到Angular承诺创建的元素中
- 将 Angular 承诺与 ng-show 结合使用
- 在angular承诺中,如何区分意外错误和计划拒绝
- 如何判断一个对象是否是Angular $q承诺?
- Angular承诺队列和显示加载数据