Mamy oto definicje:
Promise.prototype.DodatkiSkryptThen=function(...args){
return jQuery.fn.DodatkiSkryptReady(function(){
var promise=generowane_watki.wygeneruj(1);
var wynik=this.then(...args);
return Promise.allSettled([promise,wynik]).then(function(){//1
generowane_watki.zwolnij();
return wynik;
});
});
}
Promise.prototype.DodatkiSkryptCatch=function(...args){
return jQuery.fn.DodatkiSkryptReady(function(){
var promise=generowane_watki.wygeneruj(1);
var wynik=this.catch(...args);
return Promise.allSettled([promise,wynik]).then(function(){//2
generowane_watki.zwolnij();
return wynik;
});
});
}
/*A wywołanie*/
var promise=new Promise(function(resolve,reject){
resolve();
});
promise.DodatkiSkryptThen(function(data){...}).DodatkiSkryptCatch(function(data){...});
Metody funkcji: generowane_watki, same się odblokowują, więc z tą funkcją nie ma problemów. Funkcja: jQuery.fn.DodatkiSkryptReady
, to funkcja z licznikiem kontrolowana przez pewny jeden muteks. Z licznikami tam raczej nie ma problemów. Jak zauważyłem funkcja się blokuje na linii:
return Promise.allSettled([promise,wynik]).then(function(){
i nie che iść dalej, tak jak by obietnica: wynik
, by się nie zwalniała, funkcja, tam, jak sprawdzałem,. .then, oczekuje na wynik: "<state>:pedding". Ten problem widocznie występuje, kiedy obietnice się zwolniły z dyrektywą: resolve
, ale nigdy: reject
, i pewnie dlatego obietnica zwracana przez: this.then
nie blokuje się, a: this.catch
, już się blokują. Pytanie: Jak ten problem naprawić?