2016-09-28 2 views
0

일부 매개 변수를 사용하고 입력 배열을 통해 반복되는 서비스를 찾고 비어있는 항목을 찾아서 배열에 추가 한 다음 $ q 다음에 추가하는 서비스를 설계했습니다 .all 해결 그것은 나에게 빈 항목의 배열을 제공해야합니다.중첩 된 약속을 해결하는 데 도움이 필요합니다. 약속이 해결되지 않습니다.

입력 문제는 $ q.all가 해결되지 않습니다이다, 이제 항목

function getElements(inputs) { 
      var elements= [], 
       promise, whenPromise, 
       promises = [], 
       mainPromise = $q.defer(); 
      if (inputs.length === 0) { 
       mainPromise.resolve(elements); 
       return mainPromise.promise; 
      } 

      angular.forEach(inputs, function (input) { 
       promise = getPromises(input); 
       whenPromise = $q.resolve(promise).then(function (response) { 
       $timeout(function() { 
         if (response.isEmpty) { 
        **//perform action with the response.data;** 
         } 
        }); 
       }, function() { 

       }); 

       promises.push(whenPromise); 
      }); 


      $q.all(promises).finally(function() { 
       mainPromise.resolve(outdatedEntities); 

      }); 

      return mainPromise.promise; 
     } 

     function getPromises(input) { 
      var deferred = $q.defer(); 

      someSerivce.getItemDetails(input.Id).then(function (value) { 
       if (value === null) { 
        $timeout(function() { 
         deferred.resolve({data: input, isEmpty: true}); 
        }); 

       } else { 
        //have item locally, but need to see if it's current 
        input.isEmpty().then(function (isEmpty) { 
         $timeout(function() { 
          deferred.resolve({data: input, isEmpty: isEmpty}); 
         }); 
        }, function (error) { 
         deferred.reject(error); 
        }); 
       } 

      }); 

      return deferred.promise; 
     } 

의 배열입니다. 모든 내부 약속이 해결 되더라도.

+0

(가)에 도달이 코드는'경우 (response.isEmpty) {'약속의 각 하시나요? –

+0

네,하지만 퍼팅 후 $ 타임 아웃 랩 – Dreamweaver

+0

퍼팅 후 $ 타임 아웃 랩 - 무슨 뜻이야? –

답변

1

이 작동합니다 :

function getElements(inputs) { 
    var elements = [], 
      promise, whenPromise, 
      promises = [], 
      mainPromise = $q.defer(); 
    if (inputs.length === 0) { 
     mainPromise.resolve(elements); 
     return mainPromise.promise; 
    } 

    angular.forEach(inputs, function (input) { 
     promise = getPromises(input); 
     whenPromise = promise.then(function (response) { 

      if (response.isEmpty) { 
       * *//perform action with the response.data;** 
      } 

     }, function() { 

     }); 

     promises.push(whenPromise); 
    }); 


    return $q.all(promises).finally(function() { 
     return outdatedEntities; 
    }); 
} 

function getPromises(input) { 
    return someSerivce.getItemDetails(input.Id).then(function (value) { 
     if (value === null) { 
      return {data: input, isEmpty: true}; 
     } else { 
      //have item locally, but need to see if it's current 
      return input.isEmpty().then(function (isEmpty) { 
       return {data: input, isEmpty: isEmpty}; 
      }, function (error) { 
       return error; 
      }); 
     } 
    }); 
} 
+0

미안하지만 나는 작은 의심의 여지가있다 : return deferred.resolve ({data : input, isEmpty : isEmpty})? 어디에 약속이 정의되어 있지 않은가 – Dreamweaver

+0

@Dreamweaver, 오타, 오타는'return {data : input, isEmpty : isEmpty}' –

+0

Ok .. 나는 방금 같은 일을했지만, 확인하고 싶었다 .. :) – Dreamweaver

관련 문제