2014-07-25 9 views
16

Próbuję wykombinować, czy istnieje jakiś sposób przekazania argumentu indeksu do funkcji zwrotnej obietnicy. Na przykład.Przesyłanie parametrów do zwrotnego obietnicy w angularjs

serviceCall.$promise.then(function(object){ 
    $scope.object = object; 
}); 

Teraz chcę przejść na parametr indeks tablicy jako

serviceCall.$promise.then(function(object,i){ 
    $scope.object[i] = something; 
}); 

można to zrobić? Proszę daj mi znać.

Oto kod poniżej

StudyService.studies.get({id:  
$routeParams.studyIdentifier}).$promise.then(function(study) { 
$scope.study = study; 
for(var i=0;i<study.cases.length;i++){ 
    StudyService.executionsteps.get({id: 
    $routeParams.studyIdentifier,caseId:study.cases[i].id}) 
     .$promise.then(function(executionSteps,i){ 
     $scope.study.cases[i].executionSteps = executionSteps; 
     }); 
    } 
}); 
+0

Co jest 'object'? –

+0

Obiekt to kolejna klasa o nazwie Study, która zawiera w sobie listę spraw, każdy z tych przypadków zawiera listę kroków. Dlatego muszę mieć możliwość indeksowania wewnątrz funkcji wywołania zwrotnego. – user3799365

+1

skąd masz "i"? – yarons

Odpowiedz

20

można użyć do tego jest closure.

na przykład w kodzie, należy użyć coś takiego:

function callbackCreator(i) { 
    return function(executionSteps) { 
    $scope.study.cases[i].executionSteps = executionSteps; 
    } 
} 
StudyService.studies.get({id: $routeParams.studyIdentifier}) 
    .$promise.then(function(study) { 
    $scope.study = study; 
    for(var i=0;i<study.cases.length;i++) { 
     var callback = callbackCreator(i); 
     StudyService.executionsteps.get({id: $routeParams.studyIdentifier,caseId:study.cases[i].id}) 
     .$promise.then(callback); 
    } 
}); 
+0

[Ta odpowiedź] (http://stackoverflow.com/a/939206/187812) rozwija nieco przy definiowaniu funkcji zwracającej wywołanie zwrotne, które może wykorzystywać dodatkowe dane. –

+2

Ty, sir, nie masz dość przebojów – toraman

0

robiłem coś podobnego i umieścić obietnicę na siebie, a następnie wykorzystywane $q.all() na tablicy obietnic jak:

$q.all(arrayOfPromises) 
.then(function(results) { 
    console.log(results[0], results[1], results[2]); 
}); 
+1

To nie daje możliwości przekazać klucz do funkcji .then(). Właśnie ustawiłeś klucze w JS – SM3RKY

Powiązane problemy