取消定时器
🌐 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();