2015-02-04 4 views
1

그래서 $ q.all을 사용하여 $ 리소스 호출을 배치하는 간단한 예제가 있는데, 제가 알고 싶은 것은 왜 내 업데이트 처리기가 호출되지 않았습니까?

각 약속이 성공적으로 완료된 후에 전화를 걸 것이라고 생각했을까요?

결과 핸들러 만 호출됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

 var promises = []; 
     angular.forEach($scope.mappedData, function(item) { 
      var resource = new Resource(item); 
      promises.push(resource.$save()); 
     }); 

     $q.all(promises).then(
      function(result) { 
       console.log('result', result); 

      }, 
      function(error) { 
       console.log('error', error); 

      }, 
      function(notify) { 
       console.log('notify', notify); 
      } 
     ); 

답변

3

$의 q.all 번 이전의 모든 약속은 다음에 계속 완료 새로운 단일 약속을 만듭니다 여기

는 코드입니다. 각각을 개별적으로하고 싶다면 개별적으로 참조해야합니다.

+0

그래서 실제로 각 약속이 완료된 후 '알림 서비스'메소드를 호출 지연된 객체를 생성하지 않는 이유는 무엇입니까? 그것이 내가 생각한 것입니다. 그러나 나는 생각하지 않습니다 ... –

+0

아니요, $ q.all은 모든 약속이 끝날 때까지 기다립니다. –

1

나는 동일한 문제가있어서, 나는이 해결책을 가지고왔다. 나는 당신의 사건에 대한 코드를 마련하려고 노력했다.

var results = [], errors = [], d = $q.defer() 
angular.forEach($scope.mappedData, function(item) { 
    var resource = new Resource(item); 
    resource.$save().promise 
    .then(function (result) { 
     results.push(result) 
     if(results.length == $scope.mappedData.length) 
      d.resolve(results) 
    }, function (err) { 
     errors.push(err) 
     results.push(null) // Very important =P 
    }, function (notf) { 
     d.notify(notf) 
    }) 
}) 

d.promise.then(function (results) { 
    console.log(results) 
}, function (err) { 
    console.error(err) 
}, function (notf) { 
    console.info(notf) 
}) 

는 도움이된다면 알려주세요)