2014-10-04 21 views
12

Ho un servizio di dati in questo modo:TypeError angolare: Impossibile leggere la proprietà 'poi' undefined

this.myFunction= function(callback) { 
    var url = rootURL + "path1/path2/service.json"; 
    var promise = $http.get(url); 
    promise.then(function(payload){ 
     return callback(payload); 
    }); 
    return promise; 
} 

Si chiama in un controller per inizializzare alcune cose:

DataService.myFunction(function(data) { 
    if(data.statusText !== "OK"){ 
     $scope.$worked= false; 
    }else{ 
     $scope.$worked= true;    
    } 
} 

E ho "TypeError: Can not read property 'then' of undefined". Console.log (dati) nella richiamata mostra una risposta 200 "OK" ei dati che mi aspetto. Ho già cercato questo errore e per lo più è dovuto a non restituire la promessa nel servizio. Tuttavia, sto restituendo la promessa. L'impostazione di qualsiasi cosa sull'ambito del controller nella richiamata causa l'errore.

versione angolare: AngularJS v1.3.0-rc.2

Grazie!

+1

potete inserire la funzione di callback? Inoltre non c'è bisogno di assegnarti una chiamata a una variabile, è già una promessa e potresti semplicemente chiamarla. –

+0

Potresti fornire un plunkr o più contesto? Sembra che quel codice non dovrebbe lanciare quel TypeError. – Jon7

risposta

22

In questo caso non è necessario restituire una promessa, perché si sta utilizzando una richiamata. Le callback e le promesse sono le due estremità dello spettro. Puoi realizzare ciò che vuoi semplicemente con questo.

Se si desidera utilizzare un callback è possibile lasciare il codice di controllo.

this.myFunction= function(callback) { 
    var url = rootURL + "path1/path2/service.json"; 
    $http.get(url).then(function(response) { 
     callback(response.data); 
    }); 
} 

Oppure, se si desidera utilizzare le promesse

this.myFunction= function() { 
    var url = rootURL + "path1/path2/service.json"; 
    return $http.get(url).then(function(response) { 
     return response.data; 
    }); 
} 

DataService.myFunction().then(function(data) { 
    if(data.statusText !== "OK"){ 
     $scope.$worked = false; 
    } else { 
     $scope.$worked = true;    
    } 
}); 
+2

+1 per un modo migliore di gestire il callback. In realtà ho scoperto che la mia app includeva "ngAnimate" da un'altra versione (v1.2.20). Non ne avevo più bisogno quindi l'ho estratto e all'improvviso non c'è più nessun errore di tipo. – DragonMoon

+0

Ho un servizio con una chiamata '$ http' e' .then (function (res) {return res;}); 'e lo chiamiamo da un controller dove ho' serviceName.functionName(). Then (function (res) {// fai qualcosa con res}) ', ma continuo a ottenere' Can not read property 'then' of undefined' nonostante abbia funzionato prima ... Quale può essere la ragione? – user841760

Problemi correlati