2014-07-25 2 views
16

Ich versuche herauszufinden, gibt es eine Möglichkeit, ein Indexargument an die Callback-Funktion eines Versprechens übergeben. Zum Beispiel.Übergabe von Parametern an den Callback des Versprechens in angularjs

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

Jetzt möchte ich als

in einem Array-Index Parameter zu übergeben
serviceCall.$promise.then(function(object,i){ 
    $scope.object[i] = something; 
}); 

dies getan werden kann? Lass es mich wissen, bitte. Hier

ist der Code unter

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

Was ist 'object'? –

+0

Objekt ist nur eine andere Klasse namens Studie, die darin eine Liste von Fällen enthält, jeder dieser Fälle hat eine Liste von Schritten. Also muss ich innerhalb der Callback-Funktion indizieren können. – user3799365

+1

Woher bekommst du 'i'? – yarons

Antwort

20

Sie verwenden können, a closure dafür.

zum Beispiel in Ihrem Code verwenden, so etwas wie:

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

festgeschrieben [Diese Antwort] (http://stackoverflow.com/a/939206/187812) erarbeitet ein wenig auf das Definieren einer Funktion, die einen Rückruf zurückgibt, der zusätzliche Daten verwenden kann. –

+2

Sie, Herr, haben nicht genug upvotes – toraman

0

ich etwas Ähnliches gemacht habe und ich habe ein Versprechen auf jeden und verwendet dann $q.all() auf dem Array von Versprechungen wie:

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

Dies gibt nicht die Möglichkeit zu Übergeben Sie den Schlüssel an die .then() -Funktion. Sie haben gerade die Schlüssel in der JS – SM3RKY