0

我希望能够构建一个依赖于实用程序库(包含记录器和 lodash)的用户服务。我的代码似乎非常接近:

  angular.module("NS.services").service "utilService", ($window, $q) ->
    console.log 'loading util service'
    util = ->
      deferred = $q.defer()
      require(["cdn-lodash"], (lodash) =>
        console.log 'deferred resolve'
        # I plan on using a more complex logger down the road, so it'd probably be
        # in another require
        deferred.resolve(lib: lodash, logger: $window.logger if $window.logger?)
      )
      deferred.promise

    util: util

  angular.module("NS.services").service "userService", ['$http','utilService', 
  ($http, util) ->
    @get = (id, onError, onSuccess) ->
      throw 'no id supplied' unless id?
      util.logger.debug 'getting user for id' + id
      $http.get("/api/user/#{id}")
        .success (users) ->
          util.logger.debug 'loaded users'
          onSuccess(users)
        .error onError
  ]

问题是userService在触发方法之前不会等待 Promise 解决get——事情并没有按照我想要的顺序发生。我曾考虑将@get方法包装在 require 中,但这似乎很笨重,而且重用的情况也很糟糕。

在构建自己之前,我怎样才能userService等待utilService完成它的承诺?

4

1 回答 1

0

如果您的 userService 想要“等待”promise,它应该调用 promise 的“then”方法。目前似乎没有发生这种情况。

于 2013-09-16T00:47:35.813 回答