Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析DOM事件上的javascript承诺_Javascript_Dom_Promise - Fatal编程技术网

解析DOM事件上的javascript承诺

解析DOM事件上的javascript承诺,javascript,dom,promise,Javascript,Dom,Promise,我一直在寻找答案,但找不到我的问题的答案(或者至少我不知道如何使其适用于我的问题)。因此我有以下功能: Test.prototype.testing = function(){ return new Promise(function (resolve, reject){ document.getElementById("element").innerHTML = "<button onclick=\"\">Next</button>"; })

我一直在寻找答案,但找不到我的问题的答案(或者至少我不知道如何使其适用于我的问题)。因此我有以下功能:

Test.prototype.testing = function(){
  return new Promise(function (resolve, reject){
    document.getElementById("element").innerHTML = 
      "<button onclick=\"\">Next</button>";
  });
};
Test.prototype.testing=函数(){
返回新承诺(功能(解决、拒绝){
document.getElementById(“元素”).innerHTML=
“下一步”;
});
};

我怎样才能使承诺在点击按钮时得到解决?提前谢谢。

你可以做到。通过在浏览器环境中使用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!"}))
})

下一步


更好的方法是在DOM中已有按钮,然后引用它。此时,只需将
onclick
事件处理程序设置为resolve函数。(如果需要,也可以使用
addEventListener

var elBtn=document.getElementById('resolver');
函数测试(){}
Test.prototype.testing=函数(){
返回新承诺(功能(解决、拒绝){
elBtn.onclick=解析;
});
};
var t=新测试();
t、 测试()。然后(x=>{
console.log('resolved!');
});
点击我

函数测试(){}
Test.prototype.testing=函数(){
返回新承诺(功能(解决、拒绝){
const btn=document.createElement(“按钮”)
btn.innerHTML='Next'
btn.addEventListener('click',resolve');
document.getElementById(“元素”).appendChild(btn)
});
};
(新测试()).testing()

是否不使用innerHTML?那样的话,你就可以通过按钮直接调用
resolve
?一个事件的承诺?我想你可以。如果您使用
document.createElement(“按钮”)
创建该按钮,然后在单击时附加解析承诺的处理程序。它应该会起作用。
<p id="element"> Next </p>