现在网络上关于承诺的所有东西都说,除了angular.js上的docs/examples之外,在使用承诺时不要使用defer。
不使用defer返回angular.js$promise的值的正确方法是什么?
以下是我目前拥有的:

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

如果我使用的是node q库,我会这样做:
function foo() {
  return Q.promise(function(resolve, reject) {
    userService.findProgramsByUser({personId: personId})
      .then(function (programs) {
        resolve(programs);
      });
  }
}

我怎样才能在不使用defer的情况下,用一个明确的承诺来做类似的事情呢?

最佳答案

既然userService.findProgramsByUser()已经有了promise属性,就返回它

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

09-17 23:32