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

时间:2014-11-05 22:14:56

标签: javascript angularjs function asynchronous

我正在以角度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已经完成了......

1 个答案:

答案 0 :(得分:1)

$ 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 () {...});
//...