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ć?
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
Ok, działa 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?
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
Ok, dzięki !
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/