为什么拒绝承诺给出未定义的错误?

Why Reject of Promise giving undefined error?

我有一组带有复选框的列表,当我单击 5 个复选框时会显示一条警告消息,恭喜您选择了 5 个选项。我必须使用 promise 进行验证。如果我不使用拒绝,它工作正常。但是,如果我添加下面给出的代码,将执行 'reject' 代码并显示错误 'undefined'。我哪里做错了?

let clickvalidation = new Promise(function(resolve, reject) {
  $('input[type=checkbox][id=chk1]').change(function() {
    if ($(this).is(':checked')) {
      noOfClick++;
      if (noOfClick == 5) {
        resolve();
      } else {
        reject();
      }
    }
  });
});

clickvalidation
  .then(function() {
    console.log('Success, You are a GEEK');
    alert(`Congrats 5 tasks have been successfully completed`);

  })
  .catch(function(e) {
    console.log(e.stack);
  });

一个承诺只能解决一次

第一次更改复选框时,您调用 reject() 并且没有向它传递任何参数(因此它出错并显示 undefined 消息)。

任何后续更改复选框时,您调用 rejectresolve 但承诺不再挂起。


Promises 是一个很好的工具,可以在您获得 a 结果时告诉您。它们并非旨在提供 多个 结果。

在这种情况下,承诺不是有用的工具。只需单独使用常规事件处理程序。

let counter = 0;

document.querySelector('input').addEventListener('change', () => {
  counter += 1;
});

document.querySelector('button').addEventListener('click', () => {
  if (counter === 5) {
    console.log("OK");
  } else {
    console.log("Not OK");
  }
});
<input type="checkbox"><button>OK</button>