我希望能够构建一个依赖于实用程序库(包含记录器和 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
完成它的承诺?