如何使用AbortController拒绝子Promise



我刚刚学习了如何使用AbortController API拒绝Promise。它运行良好,但当承诺拒绝作为";child Promise";,即使父Promise被拒绝,这个仍将继续运行。

当父母被拒绝时,有没有办法也阻止孩子?

在本例中,这意味着当您单击取消按钮时,在rejected日志之后不再有running日志:

let controller = new AbortController();
new Promise((resolve, reject) => {
setInterval(() => console.log("running"), 500)
controller.signal.addEventListener('abort', () => {
console.log("rejected")
reject();
});
});
function cancel() {
controller.abort();
}
<button onclick="cancel()">Cancel async loop</button>

Promise和abort控制器都很好,需要清除的是您的定时器功能。

当您声明setInterval时,它会返回一个id,稍后可以引用该id来清除计时器。

所以,当你拒绝承诺时,你需要清除它。

let controller = new AbortController();
new Promise((resolve, reject) => {
const id = setInterval(() => console.log("running"), 500)
controller.signal.addEventListener('abort', () => {
console.log("rejected");
clearInterval(id);
reject();
});
});
function cancel() {
controller.abort();
}
<button onclick="cancel()">Cancel async loop</button>

最新更新