J'ai cherché une réponse mais je n'ai pas trouvé de réponse pour mon problème (ou du moins je n'ai pas compris comment le faire fonctionner pour le mien.) J'ai donc cette fonction:
Test.prototype.testing = function(){ return new Promise(function (resolve, reject){ document.getElementById("element").innerHTML = "<button onclick=\"\">Next</button>"; }); };
3 Réponses :
Vous pouvez le faire. En utilisant l'API CustomEvent pour l'environnement du navigateur.
<p id="element"> Next </p>
function myPromiseReturningFunction() { return new Promise(resolve => { window.addEventListener("myCustomEvent", (event) => { resolve(event.detail); }) }) } myPromiseReturningFunction().then(result => { alert(result) }) document.getElementById("element").addEventListener("click", () => { window.dispatchEvent(new CustomEvent("myCustomEvent", {detail : "It works!"})) })
Une meilleure façon serait d'avoir déjà le bouton dans le DOM, puis de le référencer. À ce stade, il suffit de définir le gestionnaire d'événements onclick
sur la fonction de résolution. (Vous pouvez également utiliser addEventListener
si vous le souhaitez)
<button id='resolver'>Click me!</button>
var elBtn = document.getElementById('resolver'); function Test(){ } Test.prototype.testing = function(){ return new Promise(function (resolve, reject){ elBtn.onclick = resolve; }); }; var t = new Test(); t.testing().then(x=> { console.log('resolved!'); });
Quelque chose comme ça?
<div id="element"></div>
function Test() {} Test.prototype.testing = function(){ return new Promise(function (resolve, reject){ const btn = document.createElement("button") btn.innerHTML = 'Next' btn.addEventListener('click', resolve); document.getElementById("element").appendChild(btn) }); }; (new Test()).testing()
Vous n'utilisez pas innerHTML? De cette façon, vous pourrez peut-être obtenir le bouton pour appeler directement
résoudre
?une promesse d'événement?
Je suppose que tu peux. si vous créez ce bouton en utilisant
document.createElement ("button")
et attachez ensuite le gestionnaire de clic qui résout la promesse. ça devrait marcher.