繁体   English   中英

有角度的函数回调正确方法

[英]angular, correct way for a function callback

我正在用angular js为我的应用程序编写ItemProvider 我选择了一项服务。

app.factory('ItemProvider', function($http) {
  var url = "http://localhost:7888/api.php/json?";

  return {
    get_data: function() {          
      $http.get(url).
        success(function(data,status,headers,config) {
          json = data;
          console.log("app returned ok");
          console.log(json);
          callback(json);
        }).

        error(function(data,status,headers,config) {
          console.log("Error getting data from app!");
          json = data;
          callback(json);
        });

      callback = function(json) {
        console.log("callback");
        return json;
      }
      console.log("already done");
    }
  };
});

当然这里发生的是get_data在通过$http返回后端的实际调用返回之前立即返回...

我如何正确地拥有一个get_data函数,该函数将从后端返回数据? 我尝试添加回调(请参见上面的代码),但我意识到在调用它时, get_data已经完成了...

$ http被硬编码为只能异步工作,这意味着您唯一的选择就是牢记这一点。 因此,get_data不可能直接返回数据,而是必须接受回调或返回promise。 我认为 ,诺言路线要容易得多。

app.factory('ItemProvider', function($http) {
  var url = "http://localhost:7888/api.php/json?";

  return {
    get_data: function(url) {          
      return $http.get(url);
    }
  };
});

用法示例:

//...
ItemProvider.get_data('/items')
  .success(function (items) {
    console.log(items);
  })
  .error(function () {...});
//...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM