Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 错误地多次调用$http.post_Javascript_Angularjs_Node.js - Fatal编程技术网

Javascript 错误地多次调用$http.post

Javascript 错误地多次调用$http.post,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,编辑: 我可能问错了问题。今天早上我简化了Node.js代码,问题就不再发生了。此问题似乎与deasync模块的使用有关: var done = false; processGridCell(cell, layers, rowCount, colCount, datasetObject, function() { done = true}); deasync.loopWhile(function(){ return !done }); 我猜deasync是用来防止函数内存不足的。每次调用pro

编辑:

我可能问错了问题。今天早上我简化了Node.js代码,问题就不再发生了。此问题似乎与deasync模块的使用有关:

var done = false;
processGridCell(cell, layers, rowCount, colCount, datasetObject, function() { done = true});
deasync.loopWhile(function(){ return !done });
我猜deasync是用来防止函数内存不足的。每次调用processGridCell都会保存一个MongoDB文档,调用次数约为12000次。因为主节点线程从不给async mongoose.save+回调留出时间,所以保存的对象永远不会被GCed,并且进程内存不足

我认为使用deasync不是一个简单的方法。我也不知道为什么使用deasync会导致来自客户端的另一个POST请求,为什么删除它会首先阻止该请求的发生


我继承了一个节点/角度应用程序,负责对其进行一些修复

所发生的情况是,当提交表单时,它会调用Node.js函数,运行该函数需要10-20分钟。几分钟后,虽然我可以看到Node函数仍在运行,但第二次从客户端提交了相同的post请求。我还没能找出原因。此外,我在发出POST请求之前记录信息,但它只记录第一次,而不是第二次

这是代码,大大简化了

HTML:

<header class="text-center" data-ng-include="'/modules/core/views/header.client.view.html'"></header>
<section>
    <div class="get-grid-form">
      <h2>Input Grid Size</h2>
        <hr>
      <form name="gridSizeForm" ng-controller="gridSizeCtrl" data-ng-submit="submitGridInput()" ng-class="{'has-error': gridSizeForm.myDecimal.$invalid}" >
        <div class="grid-input-form">

            <p>Other Irrelevent Content</p>

            <div class="get-grid-form-button" ng-show="!isLoading&&isCalculating&&!isError">
                <button type="submit" class="btn btn-primary" style="width: auto; margin: 2px;">OK</button>
                <button type="button" class="btn btn-primary" ng-show="!isLoading" ng-click="cancel()"style="width: auto; margin: 2px;">Cancel</button>
            </div>
        </div>
      </form>
    </div>
</section>
节点:


应用程序中是否有任何类型的
httpInterceptor
,在原始超时时会触发新请求?我不这么认为。虽然我不是100%确定在哪里可以找到它。我看到文本“拦截器”的唯一位置是在我的文件中的Angular.js文件本身。如果有一个(或多个)它将是一个工厂,如:我看到
$stateParams
,这表示ui路由器。我猜模板是通过状态配置加载并绑定到
gridSizeCtrl
。在模板中使用
ng controller
,添加另一个控制器实例。不要两者都用。事实上,很少看到
ng controller
@Phil有任何有效的用途,事实似乎并非如此。删除ng控制器会导致submit按钮不执行任何操作,因此它可能无法找到该方法。明天我将能够更仔细地研究这个问题。如果原始请求超时,应用程序中是否存在触发新请求的
httpInterceptor
?我不这么认为。虽然我不是100%确定在哪里可以找到它。我看到文本“拦截器”的唯一位置是在我的文件中的Angular.js文件本身。如果有一个(或多个)它将是一个工厂,如:我看到
$stateParams
,这表示ui路由器。我猜模板是通过状态配置加载并绑定到
gridSizeCtrl
。在模板中使用
ng controller
,添加另一个控制器实例。不要两者都用。事实上,很少看到
ng controller
@Phil有任何有效的用途,事实似乎并非如此。删除ng控制器会导致submit按钮不执行任何操作,因此它可能无法找到该方法。明天我可以更仔细地调查这件事。
angular.module('module').controller('gridSizeCtrl', ['$scope', 'Upload',
    '$http', '$window', '$stateParams', '$location',
    function ($scope,Upload,$http,$window,$stateParams,$location) 
{
    $scope.submitGridInput = function() {
        if ($scope.cellwidth === 'default') {
            units = 'kilometers';
            cellwidthval = 1;
        }

        $scope.upload( $scope.cellwidth, units, cellwidthval,
            $location.search()['param']);
    };

    $scope.upload = function (cellwidth,units,widthval, params) {
        $scope.isLoading = true;

        console.log("This only logs once. The second request fires without this logging")

        $http.post('/module/grid/create', 
        {  data:{someData: someData}
        }).success(function(response) 
        {   //success code
        }).error(function(response) 
        {   //error code
        });
    };
}
function moduleGridCreateFunction(req, res)
{
    try
    {
        mongoose.find(
        function(err)
        {
            mongoose.save(function(err)
            {
                mongoose.save(function(err)
                {
                    //etc. etc. etc. 
                    if(err)
                    { res.status(400).jsonp('some error'); }
                    else
                    {   //do thing that takes 10 minutes
                        res.status(200).jsonp('success');
                    }               
                });
            });
        });
    }
    catch(err)
    { res.status(400).jsonp('error'); }
}