我有一个函数进行休息服务调用,我将用它来从返回的数据填充数组。 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);
其余调用返回数据,如果&#34; aName&#34;存在,然后我想在数组中跟踪它。 我如何&#34;暂停&#34;执行以便数组&#34; duplicateNames&#34;将有&#34; aName&#34;添加到它?
答案 0 :(得分:0)
你不能暂停执行,承诺的全部意义在于它是异步执行的。也就是说,在处理http请求时,您的代码将继续执行。一旦http请求返回结果,就会调用success
函数。在示例中,您提供了console.log
语句在responsePromise.success
函数之前执行。如果将日志语句移动到成功函数中,您将看到预期的结果。
在您的示例中,duplicatNames
数组不是当前$ scope的模型,因此它的值有限,正如您所发现的 - 当函数退出时数组的值不是您的值但是,如果通过将数组附加到控制器的$scope
来使数组成为模型,则可以使用双向绑定或$watch
语句对更新后的值执行某些操作。< / p>
基本上,您需要开始异步思考,并了解HTTP请求另一端的进程可能需要一些时间来考虑它。关于角度承诺的学习有很多资源,这里有4: