有利的$承诺,而不使用延期
网上关于承诺的一切都说不要用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%确定服务器只会被请求一次,并且每个并行请求将被服务。