I don't think we should be using strong ref to a listener, instead we should use a weak one and associate listener with a promise, so that it can be GC-ed if promise is no longer referenced.