【问题标题】:angularjs to wait for response from server, similar to callbackangularjs 等待服务器响应,类似于回调
【发布时间】:2015-09-08 20:53:53
【问题描述】:

我遇到了客户端没有等待服务器响应的问题。我有一个在服务器上运行并返回数据的大查询。但是在客户端,它在处理数据之前并不等待服务器的响应。 我尝试了 angularjs .then 函数但没有成功。 服务是“myService”,如下所示。

this.getJsonData = function() {
    var searchData =  caller.get("/metadata/Search").then(function(result){
      return result.data;
    });
    return searchData;
  };

呼叫服务

myService.getJsonData().then(
    function(data) {
     formatData(data);
    },
    function(err) {
      console.log("Error here" + err);
    });

现在调用了 formatData,而来自服务器调用的响应在 getJsonData 中等待处理。

谁能帮我解决这个问题。

**********已编辑********** 试过了,还是不行

this.getJsonData = function() {
    var deffered = $q.seDefer();
    caller.get("/metadata/Search").then(function(result){
      deffered.resolve(result.data);
    });
    return deffered.promises;
  };

【问题讨论】:

  • 可以在加载 DOM 内容之前预先加载这些数据吗?
  • 我只能在用户点击按钮时运行此数据提取
  • 您正试图通过 ajax 请求这样做?如果是这样,那么您可能希望向页面添加一个加载模式,以向用户显示工作正在后台进行,然后当数据可从传出的 ajax 请求中获得时隐藏该模式。
  • 这不是 UI 屏幕拦截器问题。即使在返回数据之前,formatData 循环也会被执行,从而导致错误。它必须与 Promise 中的 $q、defer 和 resolve 函数有关。
  • 是的,promise 肯定是你想要走的路。请参阅此示例:stackoverflow.com/questions/27238928/…

标签: javascript angularjs callback


【解决方案1】:

这是一个如何在长时间运行的调用中使用 Promise 的示例:http://fiddle.jshell.net/82vLx76y/

通过从一个函数返回一个promise,我们可以推迟另一个链式函数的执行,并利用第一个函数的返回值。有关更多信息,请参阅 Angular 的 $q 服务文档:https://docs.angularjs.org/api/ng/service/$q

【讨论】:

  • 我尝试添加超时,但这只是等待了一段时间,但实际上并没有等待服务器响应。
  • 不要使用超时,它只是用来模拟长时间运行的任务。改为执行您长时间运行的数据函数并在其末尾解析 $q。
  • 我更新了上面的代码。这也不起作用。
  • 谁能帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多