将值从内部get语句传递给out get语句

时间:2017-09-18 14:36:51

标签: angularjs promise

嗨,我是棱角分明的新人,想要了解承诺。我在另一个内部有2个http get(嵌套)。我想使用inside循环的值来形成外部get语句的链接,如下所示。

        $scope.loadtable = function (task){

        var bgUrl = "cloudantlink";

        $http.get(bgUrl)
        .success(function (response) {
            $scope.fileTableData =[];
            for(var i =0;i<response.rows.length;i++){

                var fileUrl = "cloudantURL";

                $http.get(fileUrl, {responseType:'arraybuffer'})
                .success(function (response) {

                     var file = new Blob([response], {type: 'application/pdf'});
                     var fileURL = URL.createObjectURL(file);

                     $scope.content = $sce.trustAsResourceUrl(fileURL);
                     console.log("this is value of promise inside loop", $scope.content);


                }).error(function(data){
                });


                console.log("this is value of promise outside loop",$scope.content);

                var fileTableEntry = {
                        'download' : '<a href=\"'+$scope.content+'\">' + $scope.content+'</a>',

                    };
                    $scope.TableData.push(TableEntry);

            }
            $scope.loadTable();

        }).error(function(data){

        });


    };

$ scope.content值始终未定义或在第二个循环之外为null。有人可以建议我将值传递给第一个get语句。

1 个答案:

答案 0 :(得分:0)

$http.get或任何异步操作只能在后台运行,并且您在其后写的任何语句都不会实际等待此操作完成。

如果要在代码完成后运行代码,则必须使用它返回的.then的{​​{1}}方法。

在这种情况下,您可能希望等待所有这些操作完成,然后调用Promise及相关内容。

要执行此操作,请保存请求返回的承诺,并等待 $scope.loadTable 来解决。不要忘记将$ q添加到控制器的依赖项中。

$q.all

您每次都会覆盖var fileRequests = []; for(...) { fileRequests.push($http.get(fileUrl) .then(function success(response) { ... return fileUrl; })) } $q.all(fileRequests).then(function(fileUrls) { .. $scope.loadTable() }) ,我认为您打算在$scope.content中保存网址。

完整代码:

$scope.fileTableData[i]