AngularJs $http 请求保持挂起,不从数据库返回值

Posted

技术标签:

【中文标题】AngularJs $http 请求保持挂起,不从数据库返回值【英文标题】:AngularJs $http request stays pending and does not return value from the database 【发布时间】:2020-06-01 07:36:22 【问题描述】:

我目前正在编写一条路线,该路线允许我从数据库中存储的过程中接收信息。我已经在 AngularJS 中编写了一个请求,在 NodeJS 中编写了一个路由,但我只是在 chrome 网络开发人员窗口中收到了一个待处理的请求。我可以看到 NodeJs 应用程序中的 console.log 具有我需要的数据,因此它已检索到它,但 AngularJS 应用程序的任何控制台日志中都没有返回任何内容。

这里是 angularJS 应用和 Node 应用的代码:

AnglaurJS:

checkForReplenishmentEmptyTrolley = async () => 
        LIBRIS.extensions.openLoadingModal();
        console.log('in checkForReplenishmentEmptyTrolley');
        try 
          const varPromise = await $http.get(`$LIBRIS.config.stockServicestockMovement/checkForUnattachedTrolley`)
            .then((response) => 
            console.log(response);
            // Request completed successfully
            , (error) => 
            // Request error
            console.log(error);
            );
          console.log(varPromise.data);
          // 1. check that there are no ghost replenish - lines 1-15
          console.log('in try/catch');
          console.log('promise', varPromise);
         catch (error) 
          console.log(error);
        
      ,

NodeJS 代码:

app.get(`$ROUTE/attachTrolley`, async function(req, res)
  const newRequest = await DB.newRequest();
  console.log('we have made it to the route');
  try 
    console.log('we have made it to the Try/Catch route');
    newRequest.input();
   const record = await newRequest.execute('dbo.usp_STK_CheckForUnattachedTrolley');
    res.json(record)
    console.log(record, 'record');
   catch (err)
    handleError(res, err);
    console.log(err);
  
);

【问题讨论】:

async/await 返回的 ES6 承诺未与 AngularJS 框架集成。 AngularJS 通过提供自己的事件处理循环来修改正常的 javascript 流程。这将 JavaScript 拆分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性监视等。 【参考方案1】:

问题是您正在对等待的承诺执行.then 并且没有从中返回任何内容。这里有两个选择

从那时起返回响应,因此当您尝试在此处访问值时 console.log(varPromise.data); 它可以工作。

或者删除.then alltogather,因为它不是必需的,因为您正在等待它。

基本上就是这样做

checkForReplenishmentEmptyTrolley = async () => 
  LIBRIS.extensions.openLoadingModal();
  console.log("in checkForReplenishmentEmptyTrolley");
  try 
    const varPromise = await $http.get(`$LIBRIS.config.stockServicestockMovement/checkForUnattachedTrolley`);
    console.log(varPromise.data);
    // 1. check that there are no ghost replenish - lines 1-15
    console.log("in try/catch");
    console.log("promise", varPromise);
   catch (error) 
    console.log(error);
  
;

希望这能解决您的问题。

【讨论】:

【参考方案2】:

解决了!我的路线中没有返回声明!

【讨论】:

以上是关于AngularJs $http 请求保持挂起,不从数据库返回值的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS $http 服务请求的默认超时是多少?

Angular Custom Async Validator 保持挂起状态

切换前置罕见摄像头时,HTML5 视频元素请求永远保持挂起状态(在移动设备上的 chrome 上)

Angular HTTPClient (HTTP) 请求永远挂起

如何在 Angular 4+ 中取消/取消订阅所有挂起的 HTTP 请求

即使光标关闭,Psycopg 请求也会挂起