This question already has answers here:
How do I return the response from an asynchronous call?
                                
                                    (36个答案)
                                
                        
                        
                            Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
                                
                                    (6个答案)
                                
                        
                                在11个月前关闭。
            
                    
$scope.openDocImg = function(id, e){
    var data = [];

    ...

    $http.post("/showDocument", cid).then(function(response){
        data = response.data.slice(0);
        console.log(data);
    });

    console.log(data.length);  //displays 0
    console.log(data);

    ...
}


我不完全理解为什么post方法中的数据充满内容,而外部没有。是因为函数内部和外部的变量作用域?

以及如何将内容复制到外部范围?

最佳答案

由于$http.post方法是异步执行的,因此,在从服务器接收响应之前,将执行console.log(data.length);语句。

因此,这就是为什么当您尝试记录0的长度时收到data的原因。

您应该使用callback函数。

function postRequest(callback){
  $http.post("/showDocument", cid).then(function(response){
    callback(response.data.slice(0));
  });
}

$scope.openDocImg = function(id, e){
    var data = [];

    ...

    postRequest(function(data){
       console.log(data.length);
       console.log(data);
    });

    ...
}

关于javascript - 在$ http.post方法中复制数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54074669/

10-11 11:33