为什么拒绝承诺给出未定义的错误?
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
消息)。
任何后续更改复选框时,您调用 reject
或 resolve
但承诺不再挂起。
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>
我有一组带有复选框的列表,当我单击 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
消息)。
任何后续更改复选框时,您调用 reject
或 resolve
但承诺不再挂起。
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>