【问题标题】:Why my post request is pending?为什么我的发帖请求处于待处理状态?
【发布时间】:2017-05-23 23:56:49
【问题描述】:

我编写了一个请求,与代码中的其他请求类似,但它挂起,我不明白为什么。

这是控制器中的代码:

  $scope.addScroll = function(){
    InternDataProvider.addScroll(globalCtrl.unscrolled)
            .then(function(reports) {
                console.log("Changes saved");
                globalCtrl.scrollmessage="Combinaison "+globalCtrl.unscrolled.media+"/"+globalCtrl.unscrolled.platoform+" ajoutée.";
                globalCtrl.scrollmessageerr="";
                }).catch(function(err) {
                  console.error('Unable to fetch forecast report: ' + err);
        });
  };

工厂部分的代码:

internDataProvider.addScroll = function(uscr)
{
    var httpParams = {
            unscrolled: uscr
    };


    return $http.post(addScroll, {
        params : httpParams,
        }).then(function(response){
            console.log("Successful: response from submitting data to server was: " + response);

            }).catch(function(err){
            console.log(err.statusCode);
    });

};

还有 node.js 部分的代码:

//Add a combination of media or platform to the scroll
function addScroll(res, queryParams)
{
    var int1 = listMedias.indexOf(queryParams.unscrolled.media) +1;
    var int2 = listPlatforms.indexOf(queryParams.unscrolled.platform);
    connection.query("UPDATE safeplusdb.scroll SET isscrolled="+true+" WHERE idm="+int1+" AND vector_id="+int2+";", function(err, records) {
              if(err) throw err;
              console.log("UPDATE safeplusdb.scroll SET isscrolled="+true+" WHERE idm="+int1+" AND vector_id="+int2+";");
      connection.query("SELECT * FROM safeplusdb.scroll;", function (err, records){
              if(err) throw err;

              for(i=0; i<records.length; i++)
              {
                var record= records[i];
                indj=indk=0;
                if(record.isscrolled==false)
                {
                  if(record.idm==null && record.vector_id !=null)
                  {
                    listUnScroll[indj] = {media : null, platform : null};
                    listUnScroll[indj].media = null;
                    listUnScroll[indj].platform = listPlatforms[record.vector_id]; 
                    indj++;
                  }
                  else if(record.vector_id==null && record.idm!=null)
                  {
                    listUnScroll[indj] = {media : null, platform : null};
                    listUnScroll[indj].platform = null;
                    listUnScroll[indj].media = listMedias[record.idm-1];
                    indj++;
                  }
                  else
                  {
                    listUnScroll[indj] = {media : null, platform : null};
                    listUnScroll[indj].media = listMedias[record.idm-1];
                    listUnScroll[indj].platform = listPlatforms[record.vector_id]; 
                    indj++;  
                  }    
                }

                else if(record.isscrolled==true)
                {
                  if(record.idm==null && record.vector_id !=null)
                  {
                    listScroll[indk] = {media : null, platform : null};
                    listScroll[indk].media = null;
                    listScroll[indk].platform = listPlatforms[record.vector_id]; 
                    indk++;
                  }
                  else if(record.vector_id==null && record.idm!=null)
                  {
                    listScroll[indk] = {media : null, platform : null};
                    listScroll[indk].platform = null;
                    listScroll[indk].media = listMedias[record.idm-1];
                    indk++;
                  }
                  else
                  {
                    listScroll[indk] = {media : null, platform : null};
                    listScroll[indk].media = listMedias[record.idm-1];
                    listScroll[indk].platform = listPlatforms[record.vector_id]; 
                    indk++;  
                  }       
                }
              }

            });
    });
}

我在 HTML 页面中获取数据,我使用控制器(使用 Angular.js)来操作它,并将它传输到我的 server.js 文件 (node.js)。

请求结果,当我在 Workbench 上对其进行测试时,它可以正常工作。但是使用此代码,我有一个未决的请求,如下所示:

当我停止 Web 应用程序时,可以进行请求执行的更改。

那么,如何解释当前的未决?如何解决?

【问题讨论】:

  • 请求处于挂起状态,因为它正在等待来自永远不会到来的服务器的明确响应。在服务器端代码中,您必须通过调用res.end(definiteResponseString) 或通过调用连续的res.write(responseFragmentString) 然后res.end(optionallyLastResponseFragment) 来发送明确的响应

标签: javascript mysql angularjs node.js


【解决方案1】:

假设您的路由处理程序仅调用此 addScroll() 函数,您不会发送对请求的响应。 res 被传递给函数,但它没有在任何地方使用。一旦您在某处res.end();,您应该会在客户端看到响应。

【讨论】:

  • 我刚刚在每个函数的末尾发布了一个 res.send。 resquest 没有挂起,但 SQL 语句仍然很慢,我需要终止进程并重新启动它以查看更改。而在其他功能,我没有把它,我没有问题。那为什么?
  • 您可能应该将res.end() 放在最里面的回调(在这种情况下为“选择”SQL 查询回调)中,以便仅在更新和选择查询完成后发送响应。如果客户端期待响应中的内容,您需要将其传递给 res.end()(或者如果您想发送 JSON 响应,请使用 Express 的帮助方法之一,例如 res.json())。
猜你喜欢
  • 2019-11-09
  • 2019-04-28
  • 2013-04-23
  • 2015-09-17
  • 2015-08-30
  • 2022-01-21
  • 2018-09-18
  • 2016-12-28
  • 2012-09-18
相关资源
最近更新 更多