2016-11-23 82 views
1

我在我的服务功能:

function getUsers() { 
    return $q((resolve, reject) => { 
     $timeout(() => { 
      let flag = true; 

      flag ? resolve(users) : reject("Error Users"); 

     }, 2000); 
    }); 
} 

,并根据$http服务

function getExampleResponse() { 
     return $http 
      .get("./example.json"); 
    } 

我知道$http.get应该返回承诺getExampleResponse()。在我的控制器我有下面的代码:

let userPromise = myService.getUsers(), 
     examplePromise = myService.getExampleResponse(); 

    $q.all([userPromise, examplePromise]) 
     .then(getAllDataSuccess) 
     .catch(getTasksError) 
     .finally(getTasksComplete); 

    function getAllDataSuccess(dataArray) { 
     console.log(dataArray[0]); // I have user object here 
     console.log(dataArray[1]); // I have promise object here 
    } 

所以经过then回调在一个情况下,我都想要的对象,在其他情况下,我开始有承诺。哪里不对?

+0

这是不太可能的。因为[$ http基本上返回$ q promise](https://github.com/angular/angular.js/blob/v1.5.8/src/ng/http.js#L964)。普拉克会有所帮助。 – estus

+0

阅读[这](http://blog.ninja-squad.com/2015/05/28/angularjs-promises/)建议HttpPromises(什么$ http等返回)是不一样的$ q promises - 似乎你想要返回$ http.get(“./ example.json”)。然后(response => response.data);' –

+0

@JaromandaX,谢谢!它帮助我 –

回答

-1

in getUsers()您正在返回$ q。如果你想通过承诺然后返回

function getUsers() { 
    var d = $q.defer(); 
    // Your code 
    return d.promise; 
} 
+0

'getUsers'是一个正常工作的人 –

+0

这是正确的。你所建议的是反模式,https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern。 – estus

+0

$ http.get()promise与$ q不同 – simon