取消定时器
【Cancelling timers】
setImmediate()、setInterval() 和 setTimeout() 方法各自返回表示已计划定时器的对象。这些对象可以用于取消定时器并防止其触发。
【The setImmediate(), setInterval(), and setTimeout() methods
each return objects that represent the scheduled timers. These can be used to
cancel the timer and prevent it from triggering.】
对于 setImmediate() 和 setTimeout() 的承诺化变体,可以使用 AbortController 来取消定时器。取消后,返回的 Promise 将被拒绝,并带有 'AbortError'。
【For the promisified variants of setImmediate() and setTimeout(),
an AbortController may be used to cancel the timer. When canceled, the
returned Promises will be rejected with an 'AbortError'.】
对于 setImmediate():
【For setImmediate():】
import { setImmediate as setImmediatePromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// We do not `await` the promise so `ac.abort()` is called concurrently.
setImmediatePromise('foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The immediate was aborted');
});
ac.abort();const { setImmediate: setImmediatePromise } = require('node:timers/promises');
const ac = new AbortController();
const signal = ac.signal;
setImmediatePromise('foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The immediate was aborted');
});
ac.abort();对于 setTimeout():
【For setTimeout():】
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';
const ac = new AbortController();
const signal = ac.signal;
// We do not `await` the promise so `ac.abort()` is called concurrently.
setTimeoutPromise(1000, 'foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The timeout was aborted');
});
ac.abort();const { setTimeout: setTimeoutPromise } = require('node:timers/promises');
const ac = new AbortController();
const signal = ac.signal;
setTimeoutPromise(1000, 'foobar', { signal })
.then(console.log)
.catch((err) => {
if (err.name === 'AbortError')
console.error('The timeout was aborted');
});
ac.abort();