在ES6中使用Promise时,为什么我的事件监听器在一次事件后不会持续?

时间:2017-03-02 09:45:24

标签: javascript promise es6-promise

我有以下代码(一个简单的代码):

代码:



var myPromise = new Promise(function(success, error) {
  document.getElementById("success").addEventListener("click", function() {
    success({
      msg: "This is success",
      code: 100
    });
  });
  document.getElementById("error").addEventListener("click", function() {
    error({
      msg: "This is error",
      code: 10
    });
  });
});
console.log("Hello");
myPromise.then(function(content) {
  console.log(content.msg);
});

myPromise.catch(function(content) {
  console.log(content.code);
});

<button id="success">Success</button>
<button id="error">Error</button>
&#13;
&#13;
&#13;

点击第一次的两个按钮记录 This is success10

为什么在第二次,第三次以及随后的时间点击两个按钮将不会在控制台窗口中记录任何内容?为什么事件监听器似乎突然消失了?

仅供参考:我目前正在尝试使用 ES6中的承诺来了解它是如何运作的。

谢谢。

1 个答案:

答案 0 :(得分:2)

仅存在EventListener,不会再次调用Error / Success函数。我添加了一个console.info - 语句来表明正在调用EventListener。

var myPromise = new Promise(function(success, error) {
  document.getElementById("success").addEventListener("click", function() {
  console.info("called success" );
    success({
      msg: "This is success",
      code: 100
    });
  });
  document.getElementById("error").addEventListener("click", function() {
  console.info("called error" );
    error({
      msg: "This is error",
      code: 10
    });
  });
});
console.log("Hello");
myPromise.then(function(content) {
  console.log(content.msg);
});

myPromise.catch(function(content) {
  console.log(content.code);
});
<button id="success">Success</button>
<button id="error">Error</button>