Angular- wywoływanie funkcji w obietnicy


(M@rco) #1

Mam utworzoną usługę Service(), a w niej 3 funkcje (http://pastebin.com/78Afe7qN). Chcę żeby po pomyślnym wykonaniu obietnicy w this.importujZajec() wywołała się funkcja daneGrupyImport(listaObecnosci), która także jest umieszczona w tej samej usłudze Service(). Tylko gdy próbuje ją wywołać przy pomocy this otrzymuję komunikat w FireBug "this.daneGrupyImport is not a function", a gdy bez this to "daneGrupyImport is not defined". Jak ją wywołać?


(djfoxer) #2

Po wejściu w importujZajec zapisz referencję do this:

this.importujZajec = function(plik) {

	var self = this;

  	var promise = this.podzielPlikNaWiersze(plik)

    ...

Następnie w środku wywołaj:

daneGrupy = self.daneGrupyImport(listaObecnosci)

i działa :slight_smile:


(M@rco) #3

Ok, działa :slight_smile: Dzięki wielki. Mógłbyś wytłumaczyć różnicę : " var self = this;" odwołuje się do usługi, a this w obietnicy do czego? Po wywołaniu  console.log(this) zwraca obiekt Window, czyli obietnica odwołuje się do bieżącego okna?


(djfoxer) #4

Then w Promise jest już w innym kontekście (okna). Możesz także zbindować ręcznie kontekst na this poprzez bind 

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind


(M@rco) #5

Ok, dzięki !


(angh) #6

Tutaj masz ladnie wytlumaczony problem z ‘this’ i jak to opanowac, z pewnoscia odpowie na to pytanie:

http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/