AngularJS:如何使用Angular Promises

时间:2014-08-19 02:37:15

标签: javascript angularjs angular-promise

我有一个函数进行休息服务调用,我将用它来从返回的数据填充数组。 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;添加到它?

1 个答案:

答案 0 :(得分:0)

你不能暂停执行,承诺的全部意义在于它是异步执行的。也就是说,在处理http请求时,您的代码将继续执行。一旦http请求返回结果,就会调用success函数。在示例中,您提供了console.log语句在responsePromise.success函数之前执行。如果将日志语句移动到成功函数中,您将看到预期的结果。

在您的示例中,duplicatNames数组不是当前$ scope的模型,因此它的值有限,正如您所发现的 - 当函数退出时数组的值不是您的值但是,如果通过将数组附加到控制器的$scope来使数组成为模型,则可以使用双向绑定或$watch语句对更新后的值执行某些操作。< / p>

基本上,您需要开始异步思考,并了解HTTP请求另一端的进程可能需要一些时间来考虑它。关于角度承诺的学习有很多资源,这里有4: