Promise a Angular broatcast rubrika: Programování: JavaScript

5 error414_1
položil/-a 26.7.2016
 
upravil/-a 27.7.2016

Ahoj,

mam mensi problem ze nevim/nerozumim jak pracovat v angularu s promise, pokud promise reaguje na broatcast zpravu. Budu to psat v pseudo kodu at se neupisu :)

mam promise ktera se resolvuje pokud prijde zprava

$q(function(){
 
   var timer;  
 
   $rootScope.$on('nejaky klic', function(){
     resolve();
     clearTimeout(timer);
   })
 
   timer = setTimeout(function(){
     reject();
   }, 1000)
}).then(function(){
  alert('ahoj svete');
})

Problem je ze kdyz tuhle promise vytvorim v nejakem bloku ktery jen jen docasny. Napriklad v dialogovem okne, takze promise by melo byt aktivni jen pokud je dialogove okno otevrene. Tak i po zavreni dialogoveho okna pokud prijde broatcast "nejaky klic", tak se zavola resolve.

Resenim by bylo kdyby promise slo nejak znicit/vymazat, nebo v promise nesmi byt nic z venku?

odkaz
4 itman
odpověděl/-a 29.7.2016

Predevsim nechapu proc pouzivat promisu a zaroven eventu. Co brani rovnou zavolat potrebnou funkci na $on.
Co se tyka problemy s modalem (nebo jinem elementem ktery ma vlastni scope) staci pouzit event $destroy. Neco ve smyslu:

// listen custom event on element scope
var releaseEvent  =  $scope.$on('customEventName', function(){
  // do something...
})
 
// prevent memory leaks
$scope.$on('$destroy', function(){
  releaseEvent();
})

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.