Javascript Angular$http-在一个函数调用中发出请求并返回响应

Javascript Angular$http-在一个函数调用中发出请求并返回响应,javascript,ruby-on-rails,angularjs,coffeescript,angular-promise,Javascript,Ruby On Rails,Angularjs,Coffeescript,Angular Promise,我正在尝试用Angular创建一个模型类型类,它近似于Rails模型约定,并具有基本的数据库交互方法。这个想法本质上是创建一个JavaScript ORM,它通过一个可预测的内部API在Rails后端工作。大概是这样的: mod = angular.module('Models') mod.factory 'User', ($http) -> class User constructor: (properties) -> _.extend(this, pro

我正在尝试用Angular创建一个模型类型类,它近似于Rails模型约定,并具有基本的数据库交互方法。这个想法本质上是创建一个JavaScript ORM,它通过一个可预测的内部API在Rails后端工作。大概是这样的:

mod = angular.module('Models')
mod.factory 'User', ($http) ->
  class User

    constructor: (properties) ->
      _.extend(this, properties)

    @find: (id) ->
      $http.get("/api/v1/users/#{id}")
        .success (response) ->
          return User.new(response)
Object {then: function, catch: function, finally: function, success: function, error: function}
User.find(5).success (response) ->
  user = User.new(response)
请求命中的API操作将返回该ID的序列化用户,
success
函数将其包装为该类的对象(
user.new(response)
)。这样,我就可以做到:

user = User.find(5)
在我的CoffeeScript中,
user
对象将是数据库中ID为5的用户,包装为我的CoffeeScript类的成员

问题是上面的编码方式,当我调用
User.find(5)
时,它返回$http promise对象,它可以调用
.success
etc,而不是调用
$http.get(…)
打开
success
案例并从中初始化
User
对象的结果。因此,如果我在上面的操作之后使用console log
user
,我会看到如下内容:

mod = angular.module('Models')
mod.factory 'User', ($http) ->
  class User

    constructor: (properties) ->
      _.extend(this, properties)

    @find: (id) ->
      $http.get("/api/v1/users/#{id}")
        .success (response) ->
          return User.new(response)
Object {then: function, catch: function, finally: function, success: function, error: function}
User.find(5).success (response) ->
  user = User.new(response)
我怎么能这样做?我尽量避免这样做:

mod = angular.module('Models')
mod.factory 'User', ($http) ->
  class User

    constructor: (properties) ->
      _.extend(this, properties)

    @find: (id) ->
      $http.get("/api/v1/users/#{id}")
        .success (response) ->
          return User.new(response)
Object {then: function, catch: function, finally: function, success: function, error: function}
User.find(5).success (response) ->
  user = User.new(response)
因为上面提到的这类问题有点挫败了我正在尝试的ORM的易用性/目的性。(我从一个模型开始,但最终希望将其提取到一个基本模型)。有什么想法吗?我不熟悉棱角分明的承诺(而且在JavaScript方面也不是很专业),对此我已经有一段时间了

谢谢


Sasha

大多数js ORM都是基于承诺的,这就是js方式……为什么要重新发明轮子?有很多解决方案,包括Angular自己的。