簡體   English   中英

解決 DOM 事件上的 javascript 承諾

[英]Resolve javascript promise on DOM event

我一直在尋找答案,但找不到適合我的問題的答案(或者至少我不明白如何讓它為我的問題服務。)所以我有這個功能:

Test.prototype.testing = function(){
  return new Promise(function (resolve, reject){
    document.getElementById("element").innerHTML = 
      "<button onclick=\"\">Next</button>";
  });
};

如何在單擊按鈕時解決承諾? 提前致謝。

你能行的。 通過為瀏覽器環境使用 CustomEvent API。

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!"}))
})
<p id="element"> Next </p>

像這樣的東西?

 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()
 <div id="element"></div>

更好的方法是在 DOM 中已經有按鈕,然后引用它。 在這一點上,將onclick事件處理程序設置為解析函數是一件簡單的事情。 (如果需要,您也可以使用addEventListener

 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!'); });
 <button id='resolver'>Click me!</button>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM