2014-07-25 8 views
16

Sto cercando di capire se esiste un modo per passare un argomento di indice alla funzione di callback di una promessa. Per esempio.Passare i parametri alla richiamata di promessa in angularjs

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

Ora voglio passare in un parametro indice di array come

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

Può questo essere fatto? Per favore mi faccia sapere.

Ecco il codice qui sotto

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

Qual è 'object'? –

+0

L'oggetto è solo un'altra classe chiamata Studio che contiene al suo interno un elenco di casi, ognuno di questi casi ha un elenco di passaggi. Quindi ho bisogno di essere in grado di indicizzare all'interno della funzione di callback. – user3799365

+1

da dove prendi 'i'? – yarons

risposta

20

è possibile utilizzare un closure per quello.

per esempio, nel codice, usare qualcosa come:

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

[Questa risposta] (http://stackoverflow.com/a/939206/187812) sono state appena codificate un po 'per definire una funzione che restituisce un callback che può utilizzare dati aggiuntivi. –

+2

Lei, signore, non ha abbastanza voti – toraman

0

Ho fatto qualcosa di simile e ho messo una promessa su ogni e poi utilizzato $q.all() sulla matrice di promesse come:

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

Questo non dà l'opportunità di passare la chiave alla funzione .then(). Le chiavi di JS – SM3RKY