有利的$承诺,而不使用延期

网上关于承诺的一切都说不要用angular.js上的docs / examples之类的promise来使用延迟。

什么是正确的方式来返回一个angular.js $承诺的价值而不使用延期?

这是我现在有的:

function foo() { var deferred = $q.defer(); userService.findProgramsByUser({personId: personId}).$promise .then(function (programs) { deferred.resolve(programs); }); return deferred.promise; } 

如果我使用节点Q库,我会这样做:

 function foo() { return Q.promise(function(resolve, reject) { userService.findProgramsByUser({personId: personId}) .then(function (programs) { resolve(programs); }); } } 

我怎么能做一个类似的angular度承诺,而不必使用延期?

由于userService.findProgramsByUser()已经有一个承诺财产,只是返回

 function foo() { return userService.findProgramsByUser({personId: personId}).$promise .then(function (programs) { return programs; }, function(){ // handle errors }); } 

我真的不明白为什么使用延迟是不好的。 在大多数情况下我的服务如下所示:

 var defers = {}; //somewhere in the service root. getData: function(id){ var defKey = 'getData' + id; if(defers.hasOwnProperty(defKey)) return defers[defKey].promise; //here is a good spot to return something from custom cache defers[defKey] = $q.defer(); serverApiRequest('/api/...').then(function(response){ defers[defKey].resolve(response.data); delete defers[defKey]; }); return defers[defKey].promise; } 

延期承诺是真棒。 通过这样的方法,我们可以100%确定服务器只会被请求一次,并且每个并行请求将被服务。