2016-12-05 2 views
0

중첩 약속이 있고 약속은 다른 약속의 결과에 따라 다르므로 Angular.js가 해결하기 전에 gien 약속을 해결하도록 할 수 있습니다. 둘째.Angular.js에서 또 다른 약속을 풀기 위해 약속 기다리기

User.getAllUsers().then(function(users) { 
    $scope.users = users; 
    for (var i = 0; i < users.length; i++) { 
     console.log('username ' + users[i].username); 
     Message.getUnreadMessages(users[i].username, localStorage.getItem("token")).then(function(messages) { 
      console.log('username in second promise' + users[i].username); 
      $scope.messages.push(messages); 
     }) 
    } 
}) 

사용자와 메시지를 모두 서비스입니다 :

여기 내 코드입니다. console.log('username '+ users[i].username);에 올바른 사용자 이름이 표시됩니다. console.log('username in second promise'+ users[i].username);는 error`를 던졌습니다 :

User.getAllUsers().then(function(users) { 
    $scope.users = users; 
    for (var i = 0; i < users.length; i++) { 
     (function(user){ 
     console.log('username ' + user.username); 
     Message.getUnreadMessages(user.username, localStorage.getItem("token")).then(function(messages) { 
      console.log('username in second promise' + user.username); 
      $scope.messages.push(messages); 
     }) 
     })(users[i]); 
    } 
}) 

https://developer.mozilla.org/en/docs/Web/JavaScript/Closures를 참조 장을 폐쇄 루프에 대해 :

이 시도 정의되지 않은

+0

당신은 폐쇄를 만드는 것이 좋습니다. –

+0

당신은 나에게 더 많은 정보를 줄 수 있어요. –

답변

1

의 특성 '이름'을 읽을 수 없습니다.

+0

고맙습니다. –

+0

도와 드리겠습니다! 대답을 받아 들일 수 있겠 니? – Thierry

0

then으로 약속을 처리 할 때 서버 response 표준 개체를 받기 때문에 $scope.users = users.data으로 전화해야합니다. 당신이 약속을 처리하기위한 success을 사용하는 것입니다 경우에, 당신은 $scope.users = users처럼 할 수 있었던 두 가지 가능한 해결 방법은 다음과 같습니다 (당신이 지금 그 일을하는 방법.) :

해결 방법 1

User.getAllUsers().then(function(users){ 

    $scope.users=users.data; //instead of users 
    for (var i=0; i<users.length; i++) { 
     console.log('username '+ users[i].username); 
     Message.getUnreadMessages(users[i].username,localStorage.getItem("token")).then(function(messages){ 
     console.log('username in second promise'+ users[i].username); 
     $scope.messages.push(messages); 
     }) 

    } 

}) 

해결 방법 2

User.getAllUsers().success(function(users){ //instead of then 

    $scope.users=users; 
    for (var i=0; i<users.length; i++) { 
     console.log('username '+ users[i].username); 
     Message.getUnreadMessages(users[i].username,localStorage.getItem("token")).then(function(messages){ 
     console.log('username in second promise'+ users[i].username); 
     $scope.messages.push(messages); 
     }) 

    } 

})