这是我发现的最相关的事情:https://stackoverflow.com/a/11972028/110233
当我只想返回一个东西时,它似乎工作得很好,但是当其他东西依赖于第一件事时,我不确定如何返回多个东西。
因为这有点迟钝,这里有一个关于我当前正在做的事情的小例子:
window.EventRosterCtrl = ($scope, subevent) ->
$scope.subevent = subevent
EventRosterCtrl.resolve =
subevent: (SubEvent, $route) ->
deferred = $q.defer()
SubEvent.get {subevent_id: $route.current.pathParams.subevent_id}, (subevent) ->
deferred.resolve subevent
return deferred.promise
这是我想要做的一个例子:
window.EventRosterCtrl = ($scope, subevent, addresses) ->
$scope.subevent = subevent
$scope.addresses = addresses
EventRosterCtrl.resolve =
subevent: (SubEvent, $route) ->
deferred = $q.defer()
SubEvent.get {subevent_id: $route.current.pathParams.subevent_id}, (subevent) ->
deferred.resolve subevent
return deferred.promise
addresses: (User) ->
deferred = $q.defer()
# how do you get subevent called first and how would you access it here?
for participant in subevent.participants
User.get {user_id: participant.user}, (user) ->
addresses[participant._id] = user.address
deferred.resolve addresses
return deferred.promise
最佳答案
您需要使用 .then() 链接 Promise
var promise = firstOperation(); promise = promise.then(function(value) { // do some more work return value; // it can be another promise }); return promise; // this one will be resolved when both steps are resolved
关于coffeescript - $q defer 和 Promise 以及如何使用它们在渲染 View 之前为 Controller 加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307501/