Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同一方法中的多个post请求_Javascript_Angularjs_Asynchronous_Synchronous - Fatal编程技术网

Javascript 同一方法中的多个post请求

Javascript 同一方法中的多个post请求,javascript,angularjs,asynchronous,synchronous,Javascript,Angularjs,Asynchronous,Synchronous,因此,我试图呈现一个图形,它使用来自两个不同且独立的post请求的数据。但是,在第二个post请求的数据到达之前调用graph命令。我怎样才能解决这个问题?发出post请求和呈现图形的命令在post代码中作为注释提到 $scope.observer_vel_data = function(){ $scope.showOverlay('loadRefPubVel'); $http({ //First http post r

因此,我试图呈现一个图形,它使用来自两个不同且独立的post请求的数据。但是,在第二个post请求的数据到达之前调用graph命令。我怎样才能解决这个问题?发出post请求和呈现图形的命令在post代码中作为注释提到

        $scope.observer_vel_data = function(){ 
        $scope.showOverlay('loadRefPubVel'); 
        $http({
            //First http post request
            method:'POST',
            url:'/api/observer_vel_data', 
            data:$scope.payload_array,
        }).then(function successCallback(response){
            console.log('API Endpoint: vel data success!'); 
            //Second post request is made in the method call below
            $scope.sentiment_var = $scope.observer_send_sentiment();
            $scope.vel_var = response.data.velocity1;
        }, function errorCallback(response){
            // console.log(response); 
            $scope.addAlert({
                type: 'danger',
                msg: 'API call failed' 
            });
        }).finally(function(){
            console.log("hello");
            console.log($scope.sentiment_var);
            //graph is rendered
            $scope.update_velocity($scope.vel_var,$scope.sentiment_var);
            $scope.hideOverlay('loadRefPubVel'); 
        });
    };

如果我理解正确,您希望代码最终。。。仅在第二个请求结束后执行

要实现这一点,您需要链接HTTP请求承诺,这意味着您需要从第一个请求的成功处理程序返回第二个HTTP请求的承诺。您的代码应该大致如下所示:

        $scope.observer_send_sentiment = function (){  
        // $scope.showOverlay('loadRefSentiment');
        var data = { 
            "angularGroups":$scope.groups
        };
        // console.log(data);
        $http({
            method:'POST',
            url:'http://localhost:9612/sentiment_velocity',
            data:data
        }).then(function successCallback(response){
            var data = response.data;
            var json_obj = JSON.parse(data.replace(/\'/g,'"'));
            var sentiments = json_obj["sentiments"];
            // console.log(sentiments);
            $scope.update_sentiment(sentiments); 
            console.log(sentiments);
            return sentiments;
        }, function errorCallback(response){
            var errmsg = response.statusText; 
            console.log(response); 
            $scope.addAlert({
                type: 'danger',
                msg: 'API call failed (sentiment basic)' + errmsg,  
            });
        }).finally(function(){
            // $scope.hideOverlay('loadRefSentiment');
        });
    };
请注意,无论是否发生错误,最终回调都将始终执行。如果希望仅在未遇到错误时执行其中一些函数,请添加另一个.thenfunction{…}


编辑:现在我们可以看到observer_send_情绪的作用了,您可以继续使用.thenfunction successCallback{…},function errorCallback{…}语法,并为每个请求保留单独的错误回调。请记住,如果您添加了另一个then块,并且希望沿着承诺链出现错误,以防止进一步执行。然后,在函数{…}块中,您应该在两个errorCallbacks的末尾添加return$q.rejectresponse。如果不使用带有.thenfunction successCallback{…},function errorCallback{…}语法的q.reject from error callbacks,则表示承诺已解析,而不是被拒绝

这是第二次调用:$scope.touction\u var=$scope.observer\u send\u touction;?如果是实际的http请求代码,请包括。@alphapilgrim Addddo这两个请求都在同一个控制器/工厂中吗?@alphapilgrim是的,它们在同一个控制器中。
$scope.observer_vel_data = function(){ 
    $scope.showOverlay('loadRefPubVel'); 
    $http({
        method:'POST',
        url:'/api/observer_vel_data', 
        data:$scope.payload_array,
    }).then(function successCallback(response){
        console.log('API Endpoint: vel data success!');
        $scope.vel_var = response.data.velocity1;
        return $scope.observer_send_sentiment();

    }).catch(function errorCallback(response) {
        //This catch will handle errors from both HTTP requests
        $scope.addAlert({
            type: 'danger',
            msg: 'API call failed' 
        });
    })
    .finally(function(){
        console.log("hello");
        console.log($scope.sentiment_var);
        //graph is rendered
        $scope.update_velocity($scope.vel_var,$scope.sentiment_var);
        $scope.hideOverlay('loadRefPubVel'); 
    });
};

$scope.observer_send_sentiment = function() {
    return $http({...}).then(function(response) {
        //process the response
        ...
        $scope.sentiment_var = parsedResponseData;
    });
};