Twin class
Een apparaatdubbel is een document met een beschrijving van de status van een apparaat dat is opgeslagen door een Azure IoT-hub en beschikbaar is, zelfs als het apparaat offline is. Het is gebouwd rond 3 secties:
- Tags: sleutel-waardeparen die alleen toegankelijk zijn vanaf de servicezijde
- Gewenste eigenschappen: bijgewerkt door een service en ontvangen door het apparaat
- Gerapporteerde eigenschappen: bijgewerkt door het apparaat en ontvangen door de service.
Houd er rekening mee dat hoewel het een mogelijkheid is dat gewenste en gerapporteerde eigenschappen niet overeenkomen en dat de logica voor het synchroniseren van deze twee verzamelingen, indien nodig, overblijft aan de gebruiker van de SDK.
Zie Understanding Device Twinsvoor meer informatie.
- Uitbreiding
-
EventEmitter
Eigenschappen
desired |
|
error |
|
properties | De gewenste en gerapporteerde eigenschappenwoordenlijsten (respectievelijk in |
user |
Overgenomen eigenschappen
capture |
Waarde: Booleaanse Wijzig de standaardoptie |
capture |
Waarde: Zie hoe u een aangepaste |
default |
Standaard kunnen maximaal Wees voorzichtig bij het instellen van de Dit is geen vaste limiet. Met het
De De verzonden waarschuwing kan worden geïnspecteerd met |
error |
Dit symbool wordt gebruikt om een listener te installeren voor het alleen controleren van Als u een listener installeert met dit symbool, wordt het gedrag niet gewijzigd zodra een |
Methoden
get() | |
get(Callback<Twin>) | Haalt de hele dubbel van de service op. |
Overgenomen methoden
add |
Luistert eenmaal naar de Het luisteren naar de Met deze API kunt u veilig Retourneert een wegwerp zodat deze zich gemakkelijker kan afmelden.
|
add |
Alias voor |
add |
|
emit<Event |
Roept synchroon elk van de listeners aan die zijn geregistreerd voor de gebeurtenis met de naam Retourneert
|
emit<Event |
|
event |
Retourneert een matrix met de gebeurtenissen waarvoor de emitter listeners heeft geregistreerd. De waarden in de matrix zijn tekenreeksen of
|
get |
|
get |
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam Voor Voor
|
get |
Retourneert de huidige maximale listenerwaarde voor de |
get |
Retourneert de momenteel ingestelde maximale hoeveelheid listeners. Voor Voor
|
listener |
Een klassemethode die het aantal listeners retourneert voor de opgegeven
|
listener |
Retourneert het aantal listeners dat luistert naar de gebeurtenis met de naam |
listener |
|
listener |
Een klassemethode die het aantal listeners retourneert voor de opgegeven
|
listeners<Event |
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam
|
listeners<Event |
|
off<Event |
Alias voor |
off<Event |
|
on(Event |
|
on(Event |
|
on<Event |
Hiermee voegt u de functie
Retourneert een verwijzing naar de Gebeurtenislisteners worden standaard aangeroepen in de volgorde waarin ze worden toegevoegd. De methode
|
on<Event |
|
on<Events, Event |
Retourneert een Een
Gebruik de optie
|
once(Event |
|
once(Event |
|
once<Event |
Hiermee voegt u een eenmalige
Retourneert een verwijzing naar de Gebeurtenislisteners worden standaard aangeroepen in de volgorde waarin ze worden toegevoegd. De methode
|
once<Event |
|
once<Events, Event |
Hiermee maakt u een Deze methode is opzettelijk algemeen en werkt met het webplatform EventTarget interface, die geen speciale
De speciale verwerking van de
Een
|
prepend |
Hiermee voegt u de functie
Retourneert een verwijzing naar de |
prepend |
|
prepend |
Hiermee voegt u een eenmalige
Retourneert een verwijzing naar de |
prepend |
|
raw |
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam
|
raw |
|
remove |
Hiermee verwijdert u alle listeners of de listeners van de opgegeven Het is slecht om listeners te verwijderen die ergens anders in de code zijn toegevoegd, met name wanneer het Retourneert een verwijzing naar de |
remove |
|
remove |
Hiermee verwijdert u de opgegeven
Zodra een gebeurtenis is verzonden, worden alle listeners die eraan zijn gekoppeld op het moment van verzenden in volgorde aangeroepen. Dit impliceert dat alle
Omdat listeners worden beheerd met behulp van een interne matrix, worden de positieindexen van alle geregistreerde listener-gewijzigd nadat de listener wordt verwijderd. Dit heeft geen invloed op de volgorde waarin listeners worden aangeroepen, maar dit betekent dat kopieën van de listenermatrix die worden geretourneerd door de methode Wanneer één functie meerdere keren is toegevoegd als handler voor één gebeurtenis (zoals in het onderstaande voorbeeld), verwijdert
Retourneert een verwijzing naar de |
remove |
|
set |
Standaard worden Retourneert een verwijzing naar de |
set |
|
[capture |
|
[capture |
Eigenschapdetails
desiredPath
static desiredPath: string
Waarde van eigenschap
string
errorEvent
static errorEvent: string
Waarde van eigenschap
string
properties
De gewenste en gerapporteerde eigenschappenwoordenlijsten (respectievelijk in properties.desired
en properties.reported
).
properties: TwinProperties
Waarde van eigenschap
userRegisteredDesiredPropertiesListener
userRegisteredDesiredPropertiesListener: boolean
Waarde van eigenschap
boolean
Details van overgenomen eigenschap
captureRejections
Waarde: Booleaanse
Wijzig de standaardoptie captureRejections
voor alle nieuwe EventEmitter
objecten.
static captureRejections: boolean
Waarde van eigenschap
boolean
overgenomen van EventEmitter.captureRejections
captureRejectionSymbol
Waarde: Symbol.for('nodejs.rejection')
Zie hoe u een aangepaste rejection handler
schrijft.
static captureRejectionSymbol: typeof captureRejectionSymbol
Waarde van eigenschap
typeof captureRejectionSymbol
overgenomen van EventEmitter.captureRejectionSymbol
defaultMaxListeners
Standaard kunnen maximaal 10
listeners worden geregistreerd voor elke gebeurtenis. Deze limiet kan worden gewijzigd voor afzonderlijke EventEmitter
exemplaren met behulp van de methode emitter.setMaxListeners(n)
. Als u de standaardwaarde voor alleEventEmitter
exemplaren wilt wijzigen, kan de eigenschap events.defaultMaxListeners
worden gebruikt. Als deze waarde geen positief getal is, wordt er een RangeError
gegenereerd.
Wees voorzichtig bij het instellen van de events.defaultMaxListeners
omdat de wijziging van invloed is op alleEventEmitter
instanties, inclusief de exemplaren die zijn gemaakt voordat de wijziging wordt aangebracht. Het aanroepen van emitter.setMaxListeners(n)
heeft echter nog steeds voorrang op events.defaultMaxListeners
.
Dit is geen vaste limiet. Met het EventEmitter
exemplaar kunnen meer listeners worden toegevoegd, maar wordt er een traceringswaarschuwing naar stderr uitgevoerd die aangeeft dat er een 'mogelijk EventEmitter-geheugenlek' is gedetecteerd. Voor één EventEmitter
kunnen de methoden emitter.getMaxListeners()
en emitter.setMaxListeners()
worden gebruikt om deze waarschuwing tijdelijk te voorkomen:
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
// do stuff
emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
});
De --trace-warnings
opdrachtregelvlag kan worden gebruikt om de stack-trace voor dergelijke waarschuwingen weer te geven.
De verzonden waarschuwing kan worden geïnspecteerd met process.on('warning')
en heeft de aanvullende emitter
, type
en count
eigenschappen, die verwijzen naar de instantie van de gebeurtenisuitzender, respectievelijk de naam van de gebeurtenis en het aantal gekoppelde listeners.
De eigenschap name
is ingesteld op 'MaxListenersExceededWarning'
.
static defaultMaxListeners: number
Waarde van eigenschap
number
overgenomen van EventEmitter.defaultMaxListeners
errorMonitor
Dit symbool wordt gebruikt om een listener te installeren voor het alleen controleren van 'error'
gebeurtenissen. Listeners die met dit symbool zijn geïnstalleerd, worden aangeroepen voordat de reguliere 'error'
listeners worden aangeroepen.
Als u een listener installeert met dit symbool, wordt het gedrag niet gewijzigd zodra een 'error'
gebeurtenis wordt verzonden. Daarom loopt het proces nog steeds vast als er geen gewone 'error'
-listener is geïnstalleerd.
static errorMonitor: typeof errorMonitor
Waarde van eigenschap
typeof errorMonitor
overgenomen van EventEmitter.errorMonitor
Methodedetails
get()
get(Callback<Twin>)
Haalt de hele dubbel van de service op.
function get(callback?: Callback<Twin>)
Parameters
- callback
-
Callback<Twin>
optionele functie die moet worden teruggeroepen met de dubbel of een fout als het transport de tweeling niet kan ophalen.
Details overgenomen methode
addAbortListener(AbortSignal, (event: Event) => void)
Luistert eenmaal naar de abort
gebeurtenis op de opgegeven signal
.
Het luisteren naar de abort
gebeurtenis bij het afbreken van signalen is onveilig en kan leiden tot bronlekken omdat een andere derde partij met het signaal e.stopImmediatePropagation()
kan aanroepen. Helaas kan Node.js dit niet wijzigen omdat deze de webstandaard zou schenden. Bovendien kunt u met de oorspronkelijke API gemakkelijk listeners verwijderen.
Met deze API kunt u veilig AbortSignal
s in Node.js API's gebruiken door deze twee problemen op te lossen door te luisteren naar de gebeurtenis, zodat stopImmediatePropagation
niet verhindert dat de listener wordt uitgevoerd.
Retourneert een wegwerp zodat deze zich gemakkelijker kan afmelden.
import { addAbortListener } from 'node:events';
function example(signal) {
let disposable;
try {
signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
disposable = addAbortListener(signal, (e) => {
// Do something when signal is aborted.
});
} finally {
disposable?.[Symbol.dispose]();
}
}
static function addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable
Parameters
- signal
-
AbortSignal
- resource
-
(event: Event) => void
Retouren
Disposable
Wegwerp dat de abort
listener verwijdert.
overgenomen van EventEmitter.addAbortListener
addListener<EventName>(EventName, Listener<{}, EventName>)
Alias voor emitter.on(eventName, listener)
.
function addListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.addListener
addListener<EventName>(EventName, Listener<{}, EventName>)
function addListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.addListener
emit<EventName>(EventName, Args<{}, EventName>)
Roept synchroon elk van de listeners aan die zijn geregistreerd voor de gebeurtenis met de naam eventName
, in de volgorde waarin ze zijn geregistreerd, waarbij de opgegeven argumenten aan elk item worden doorgegeven.
Retourneert true
als de gebeurtenis listeners had, anders false
.
import { EventEmitter } from 'node:events';
const myEmitter = new EventEmitter();
// First listener
myEmitter.on('event', function firstListener() {
console.log('Helloooo! first listener');
});
// Second listener
myEmitter.on('event', function secondListener(arg1, arg2) {
console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
});
// Third listener
myEmitter.on('event', function thirdListener(...args) {
const parameters = args.join(', ');
console.log(`event with parameters ${parameters} in third listener`);
});
console.log(myEmitter.listeners('event'));
myEmitter.emit('event', 1, 2, 3, 4, 5);
// Prints:
// [
// [Function: firstListener],
// [Function: secondListener],
// [Function: thirdListener]
// ]
// Helloooo! first listener
// event with parameters 1, 2 in second listener
// event with parameters 1, 2, 3, 4, 5 in third listener
function emit<EventName>(eventName: EventName, args: Args<{}, EventName>): boolean
Parameters
- eventName
-
EventName
- args
-
Args<{}, EventName>
Retouren
boolean
overgenomen van EventEmitter.emit
emit<EventName>(EventName, Args<{}, EventName>)
function emit<EventName>(eventName: EventName, args: Args<{}, EventName>): boolean
Parameters
- eventName
-
EventName
- args
-
Args<{}, EventName>
Retouren
boolean
overgenomen van EventEmitter.emit
eventNames()
Retourneert een matrix met de gebeurtenissen waarvoor de emitter listeners heeft geregistreerd. De waarden in de matrix zijn tekenreeksen of Symbol
s.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
function eventNames(): (string | symbol)[]
Retouren
(string | symbol)[]
overgenomen van EventEmitter.eventNames
getEventListeners(EventEmitter<{}> | EventTarget, string | symbol)
static function getEventListeners(emitter: EventEmitter<{}> | EventTarget, name: string | symbol): Function[]
Parameters
- emitter
-
EventEmitter<{}> | EventTarget
- name
-
string | symbol
Retouren
Function[]
overgenomen van EventEmitter.getEventListeners
getEventListeners<Events, EventName>(EventEmitter<Events>, EventName)
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam eventName
.
Voor EventEmitter
gedraagt dit zich precies hetzelfde als het aanroepen van .listeners
op de emitter.
Voor EventTarget
is dit de enige manier om de gebeurtenislisteners voor het doel van de gebeurtenis op te halen. Dit is handig voor foutopsporing en diagnostische doeleinden.
import { getEventListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
const listener = () => console.log('Events are fun');
ee.on('foo', listener);
console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
}
{
const et = new EventTarget();
const listener = () => console.log('Events are fun');
et.addEventListener('foo', listener);
console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
}
static function getEventListeners<Events, EventName>(emitter: EventEmitter<Events>, name: EventName): Listener<Events, EventName>[]
Parameters
- emitter
-
EventEmitter<Events>
- name
-
EventName
Retouren
Listener<Events, EventName>[]
overgenomen van EventEmitter.getEventListeners
getMaxListeners()
Retourneert de huidige maximale listenerwaarde voor de EventEmitter
die is ingesteld door emitter.setMaxListeners(n)
of standaard ingesteld op defaultMaxListeners.
function getMaxListeners(): number
Retouren
number
overgenomen van EventEmitter.getMaxListeners
getMaxListeners(EventEmitter<{}> | EventTarget)
Retourneert de momenteel ingestelde maximale hoeveelheid listeners.
Voor EventEmitter
gedraagt dit zich precies hetzelfde als het aanroepen van .getMaxListeners
op de emitter.
Voor EventTarget
is dit de enige manier om de maximale gebeurtenislisteners voor het gebeurtenisdoel op te halen. Als het aantal gebeurtenis-handlers op één EventTarget de maximale set overschrijdt, wordt er een waarschuwing afgedrukt.
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
static function getMaxListeners(emitter: EventEmitter<{}> | EventTarget): number
Parameters
- emitter
-
EventEmitter<{}> | EventTarget
Retouren
number
overgenomen van EventEmitter.getMaxListeners
listenerCount(EventEmitter<{}>, string | symbol)
Waarschuwing
Deze API is nu afgeschaft.
Since v3.2.0 - Use listenerCount
instead.
Een klassemethode die het aantal listeners retourneert voor de opgegeven eventName
geregistreerd op de opgegeven emitter
.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
static function listenerCount(emitter: EventEmitter<{}>, eventName: string | symbol): number
Parameters
- emitter
-
EventEmitter<{}>
De emitter om een query uit te voeren
- eventName
-
string | symbol
De gebeurtenisnaam
Retouren
number
overgenomen van EventEmitter.listenerCount
listenerCount<EventName>(EventName, Listener<{}, EventName>)
Retourneert het aantal listeners dat luistert naar de gebeurtenis met de naam eventName
.
Als listener
wordt opgegeven, wordt geretourneerd hoe vaak de listener wordt gevonden in de lijst met listeners van de gebeurtenis.
function listenerCount<EventName>(eventName: EventName, listener?: Listener<{}, EventName>): number
Parameters
- eventName
-
EventName
De naam van de gebeurtenis die wordt geluisterd
- listener
-
Listener<{}, EventName>
De functie gebeurtenis-handler
Retouren
number
overgenomen van EventEmitter.listenerCount
listenerCount<EventName>(EventName, Listener<{}, EventName>)
function listenerCount<EventName>(eventName: EventName, listener?: Listener<{}, EventName>): number
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
number
overgenomen van EventEmitter.listenerCount
listenerCount<Events, EventName>(EventEmitter<Events>, EventName)
Waarschuwing
Deze API is nu afgeschaft.
Since v3.2.0 - Use listenerCount
instead.
Een klassemethode die het aantal listeners retourneert voor de opgegeven eventName
geregistreerd op de opgegeven emitter
.
import { EventEmitter, listenerCount } from 'node:events';
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
static function listenerCount<Events, EventName>(emitter: EventEmitter<Events>, eventName: EventName): number
Parameters
- emitter
-
EventEmitter<Events>
De emitter om een query uit te voeren
- eventName
-
EventName
De gebeurtenisnaam
Retouren
number
overgenomen van EventEmitter.listenerCount
listeners<EventName>(EventName)
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam eventName
.
server.on('connection', (stream) => {
console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
function listeners<EventName>(eventName: EventName): Listener<{}, EventName>[]
Parameters
- eventName
-
EventName
Retouren
Listener<{}, EventName>[]
overgenomen van EventEmitter.listeners
listeners<EventName>(EventName)
function listeners<EventName>(eventName: EventName): Listener<{}, EventName>[]
Parameters
- eventName
-
EventName
Retouren
Listener<{}, EventName>[]
overgenomen van EventEmitter.listeners
off<EventName>(EventName, Listener<{}, EventName>)
Alias voor emitter.removeListener()
.
function off<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.off
off<EventName>(EventName, Listener<{}, EventName>)
function off<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.off
on(EventEmitter<{}>, string | symbol, StaticEventEmitterIteratorOptions)
static function on(emitter: EventEmitter<{}>, eventName: string | symbol, options?: StaticEventEmitterIteratorOptions): AsyncIterator<any[], any, any>
Parameters
- emitter
-
EventEmitter<{}>
- eventName
-
string | symbol
- options
-
StaticEventEmitterIteratorOptions
Retouren
AsyncIterator<any[], any, any>
overgenomen van EventEmitter.on
on(EventTarget, string, StaticEventEmitterIteratorOptions)
static function on(emitter: EventTarget, eventName: string, options?: StaticEventEmitterIteratorOptions): AsyncIterator<any[], any, any>
Parameters
- emitter
-
EventTarget
- eventName
-
string
- options
-
StaticEventEmitterIteratorOptions
Retouren
AsyncIterator<any[], any, any>
overgenomen van EventEmitter.on
on<EventName>(EventName, Listener<{}, EventName>)
Hiermee voegt u de functie listener
toe aan het einde van de listenersmatrix voor de gebeurtenis met de naam eventName
. Er worden geen controles uitgevoerd om te zien of de listener
al is toegevoegd. Meerdere aanroepen die dezelfde combinatie van eventName
doorgeven en listener
leiden ertoe dat de listener
meerdere keren wordt toegevoegd en aangeroepen.
server.on('connection', (stream) => {
console.log('someone connected!');
});
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
Gebeurtenislisteners worden standaard aangeroepen in de volgorde waarin ze worden toegevoegd. De methode emitter.prependListener()
kan worden gebruikt als alternatief om de gebeurtenislistener toe te voegen aan het begin van de listenersmatrix.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
function on<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
De naam van de gebeurtenis.
- listener
-
Listener<{}, EventName>
De callback-functie
Retouren
overgenomen van EventEmitter.on
on<EventName>(EventName, Listener<{}, EventName>)
function on<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.on
on<Events, EventName>(EventEmitter<Events>, EventName, StaticEventEmitterIteratorOptions)
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo')) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
Retourneert een AsyncIterator
die eventName
gebeurtenissen herhaalt. Het zal gooien als de EventEmitter
'error'
verzendt. Alle listeners worden verwijderd bij het afsluiten van de lus. De value
geretourneerd door elke iteratie is een matrix die bestaat uit de gegenereerde gebeurtenisargumenten.
Een AbortSignal
kan worden gebruikt om wachten op gebeurtenissen te annuleren:
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ac = new AbortController();
(async () => {
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
});
for await (const event of on(ee, 'foo', { signal: ac.signal })) {
// The execution of this inner block is synchronous and it
// processes one event at a time (even with await). Do not use
// if concurrent execution is required.
console.log(event); // prints ['bar'] [42]
}
// Unreachable here
})();
process.nextTick(() => ac.abort());
Gebruik de optie close
om een matrix met gebeurtenisnamen op te geven waarmee de iteratie wordt beëindigd:
import { on, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
// Emit later on
process.nextTick(() => {
ee.emit('foo', 'bar');
ee.emit('foo', 42);
ee.emit('close');
});
for await (const event of on(ee, 'foo', { close: ['close'] })) {
console.log(event); // prints ['bar'] [42]
}
// the loop will exit after 'close' is emitted
console.log('done'); // prints 'done'
static function on<Events, EventName>(emitter: EventEmitter<Events>, eventName: EventName, options?: StaticEventEmitterIteratorOptions): AsyncIterator<Args<Events, EventName>, any, any>
Parameters
- emitter
-
EventEmitter<Events>
- eventName
-
EventName
- options
-
StaticEventEmitterIteratorOptions
Retouren
AsyncIterator<Args<Events, EventName>, any, any>
Een AsyncIterator
die eventName
gebeurtenissen herhaalt die door de emitter
zijn verzonden
overgenomen van EventEmitter.on
once(EventEmitter<{}>, string | symbol, StaticEventEmitterOptions)
static function once(emitter: EventEmitter<{}>, eventName: string | symbol, options?: StaticEventEmitterOptions): Promise<any[]>
Parameters
- emitter
-
EventEmitter<{}>
- eventName
-
string | symbol
- options
-
StaticEventEmitterOptions
Retouren
Promise<any[]>
overgenomen van EventEmitter.once
once(EventTarget, string, StaticEventEmitterOptions)
static function once(emitter: EventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise<any[]>
Parameters
- emitter
-
EventTarget
- eventName
-
string
- options
-
StaticEventEmitterOptions
Retouren
Promise<any[]>
overgenomen van EventEmitter.once
once<EventName>(EventName, Listener<{}, EventName>)
Hiermee voegt u een eenmaligeeventName
wordt geactiveerd, wordt deze listener verwijderd en vervolgens aangeroepen.
server.once('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
Gebeurtenislisteners worden standaard aangeroepen in de volgorde waarin ze worden toegevoegd. De methode emitter.prependOnceListener()
kan worden gebruikt als alternatief om de gebeurtenislistener toe te voegen aan het begin van de listenersmatrix.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.once('foo', () => console.log('a'));
myEE.prependOnceListener('foo', () => console.log('b'));
myEE.emit('foo');
// Prints:
// b
// a
function once<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
De naam van de gebeurtenis.
- listener
-
Listener<{}, EventName>
De callback-functie
Retouren
overgenomen van EventEmitter.once
once<EventName>(EventName, Listener<{}, EventName>)
function once<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.once
once<Events, EventName>(EventEmitter<Events>, EventName, StaticEventEmitterOptions)
Hiermee maakt u een Promise
die wordt uitgevoerd wanneer de EventEmitter
de opgegeven gebeurtenis verzendt of die wordt geweigerd als de EventEmitter
'error'
verzendt tijdens het wachten.
De Promise
wordt omgezet met een matrix van alle argumenten die worden verzonden naar de opgegeven gebeurtenis.
Deze methode is opzettelijk algemeen en werkt met het webplatform EventTarget interface, die geen speciale'error'
gebeurtenissemantiek heeft en niet luistert naar de 'error'
gebeurtenis.
import { once, EventEmitter } from 'node:events';
import process from 'node:process';
const ee = new EventEmitter();
process.nextTick(() => {
ee.emit('myevent', 42);
});
const [value] = await once(ee, 'myevent');
console.log(value);
const err = new Error('kaboom');
process.nextTick(() => {
ee.emit('error', err);
});
try {
await once(ee, 'myevent');
} catch (err) {
console.error('error happened', err);
}
De speciale verwerking van de 'error'
gebeurtenis wordt alleen gebruikt wanneer events.once()
wordt gebruikt om te wachten op een andere gebeurtenis. Als events.once()
wordt gebruikt om te wachten op de 'error'
gebeurtenis zelf, wordt het beschouwd als een ander soort gebeurtenis zonder speciale verwerking:
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
once(ee, 'error')
.then(([err]) => console.log('ok', err.message))
.catch((err) => console.error('error', err.message));
ee.emit('error', new Error('boom'));
// Prints: ok boom
Een AbortSignal
kan worden gebruikt om het wachten op de gebeurtenis te annuleren:
import { EventEmitter, once } from 'node:events';
const ee = new EventEmitter();
const ac = new AbortController();
async function foo(emitter, event, signal) {
try {
await once(emitter, event, { signal });
console.log('event emitted!');
} catch (error) {
if (error.name === 'AbortError') {
console.error('Waiting for the event was canceled!');
} else {
console.error('There was an error', error.message);
}
}
}
foo(ee, 'foo', ac.signal);
ac.abort(); // Abort waiting for the event
ee.emit('foo'); // Prints: Waiting for the event was canceled!
static function once<Events, EventName>(emitter: EventEmitter<Events>, eventName: EventName, options?: StaticEventEmitterOptions): Promise<Args<Events, EventName>>
Parameters
- emitter
-
EventEmitter<Events>
- eventName
-
EventName
- options
-
StaticEventEmitterOptions
Retouren
Promise<Args<Events, EventName>>
overgenomen van EventEmitter.once
prependListener<EventName>(EventName, Listener<{}, EventName>)
Hiermee voegt u de functie listener
toe aan de die begint van de listenersmatrix voor de gebeurtenis met de naam eventName
. Er worden geen controles uitgevoerd om te zien of de listener
al is toegevoegd. Meerdere aanroepen die dezelfde combinatie van eventName
doorgeven en listener
leiden ertoe dat de listener
meerdere keren wordt toegevoegd en aangeroepen.
server.prependListener('connection', (stream) => {
console.log('someone connected!');
});
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
function prependListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
De naam van de gebeurtenis.
- listener
-
Listener<{}, EventName>
De callback-functie
Retouren
overgenomen van EventEmitter.prependListener
prependListener<EventName>(EventName, Listener<{}, EventName>)
function prependListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.prependListener
prependOnceListener<EventName>(EventName, Listener<{}, EventName>)
Hiermee voegt u een eenmaligelistener
functie toe voor de gebeurtenis met de naam eventName
aan de die begint van de listenersmatrix. De volgende keer dat eventName
wordt geactiveerd, wordt deze listener verwijderd en vervolgens aangeroepen.
server.prependOnceListener('connection', (stream) => {
console.log('Ah, we have our first user!');
});
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
function prependOnceListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
De naam van de gebeurtenis.
- listener
-
Listener<{}, EventName>
De callback-functie
Retouren
overgenomen van EventEmitter.prependOnceListener
prependOnceListener<EventName>(EventName, Listener<{}, EventName>)
function prependOnceListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.prependOnceListener
rawListeners<EventName>(EventName)
Retourneert een kopie van de matrix van listeners voor de gebeurtenis met de naam eventName
, inclusief eventuele wrappers (zoals die zijn gemaakt door .once()
).
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.once('log', () => console.log('log once'));
// Returns a new Array with a function `onceWrapper` which has a property
// `listener` which contains the original listener bound above
const listeners = emitter.rawListeners('log');
const logFnWrapper = listeners[0];
// Logs "log once" to the console and does not unbind the `once` event
logFnWrapper.listener();
// Logs "log once" to the console and removes the listener
logFnWrapper();
emitter.on('log', () => console.log('log persistently'));
// Will return a new Array with a single function bound by `.on()` above
const newListeners = emitter.rawListeners('log');
// Logs "log persistently" twice
newListeners[0]();
emitter.emit('log');
function rawListeners<EventName>(eventName: EventName): Listener<{}, EventName>[]
Parameters
- eventName
-
EventName
Retouren
Listener<{}, EventName>[]
overgenomen van EventEmitter.rawListeners
rawListeners<EventName>(EventName)
function rawListeners<EventName>(eventName: EventName): Listener<{}, EventName>[]
Parameters
- eventName
-
EventName
Retouren
Listener<{}, EventName>[]
overgenomen van EventEmitter.rawListeners
removeAllListeners<EventName>(EventName)
Hiermee verwijdert u alle listeners of de listeners van de opgegeven eventName
.
Het is slecht om listeners te verwijderen die ergens anders in de code zijn toegevoegd, met name wanneer het EventEmitter
exemplaar is gemaakt door een ander onderdeel of een andere module (bijvoorbeeld sockets of bestandsstromen).
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
function removeAllListeners<EventName>(eventName: EventName): Twin
Parameters
- eventName
-
EventName
Retouren
overgenomen van EventEmitter.removeAllListeners
removeAllListeners<EventName>(EventName)
function removeAllListeners<EventName>(eventName?: EventName): Twin
Parameters
- eventName
-
EventName
Retouren
overgenomen van EventEmitter.removeAllListeners
removeListener<EventName>(EventName, Listener<{}, EventName>)
Hiermee verwijdert u de opgegeven listener
uit de listenermatrix voor de gebeurtenis met de naam eventName
.
const callback = (stream) => {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
removeListener()
verwijdert maximaal één exemplaar van een listener uit de listenermatrix. Als er meerdere keren één listener is toegevoegd aan de listenermatrix voor de opgegeven eventName
, moet removeListener()
meerdere keren worden aangeroepen om elk exemplaar te verwijderen.
Zodra een gebeurtenis is verzonden, worden alle listeners die eraan zijn gekoppeld op het moment van verzenden in volgorde aangeroepen. Dit impliceert dat alle removeListener()
of removeAllListeners()
aanroepen nadat verzenden en voordat de laatste listener de uitvoering heeft voltooid, deze niet uitemit()
worden verwijderd. Volgende gebeurtenissen gedragen zich zoals verwacht.
import { EventEmitter } from 'node:events';
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
const callbackA = () => {
console.log('A');
myEmitter.removeListener('event', callbackB);
};
const callbackB = () => {
console.log('B');
};
myEmitter.on('event', callbackA);
myEmitter.on('event', callbackB);
// callbackA removes listener callbackB but it will still be called.
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Prints:
// A
// B
// callbackB is now removed.
// Internal listener array [callbackA]
myEmitter.emit('event');
// Prints:
// A
Omdat listeners worden beheerd met behulp van een interne matrix, worden de positieindexen van alle geregistreerde listener-gewijzigd nadat de listener wordt verwijderd. Dit heeft geen invloed op de volgorde waarin listeners worden aangeroepen, maar dit betekent dat kopieën van de listenermatrix die worden geretourneerd door de methode emitter.listeners()
opnieuw moeten worden gemaakt.
Wanneer één functie meerdere keren is toegevoegd als handler voor één gebeurtenis (zoals in het onderstaande voorbeeld), verwijdert removeListener()
het laatst toegevoegde exemplaar. In het voorbeeld wordt de once('ping')
listener verwijderd:
import { EventEmitter } from 'node:events';
const ee = new EventEmitter();
function pong() {
console.log('pong');
}
ee.on('ping', pong);
ee.once('ping', pong);
ee.removeListener('ping', pong);
ee.emit('ping');
ee.emit('ping');
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
function removeListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.removeListener
removeListener<EventName>(EventName, Listener<{}, EventName>)
function removeListener<EventName>(eventName: EventName, listener: Listener<{}, EventName>): Twin
Parameters
- eventName
-
EventName
- listener
-
Listener<{}, EventName>
Retouren
overgenomen van EventEmitter.removeListener
setMaxListeners(number)
Standaard worden EventEmitter
s een waarschuwing afgedrukt als er meer dan 10
listeners worden toegevoegd voor een bepaalde gebeurtenis. Dit is een nuttige standaardinstelling waarmee geheugenlekken kunnen worden gevonden. Met de methode emitter.setMaxListeners()
kan de limiet voor dit specifieke EventEmitter
exemplaar worden gewijzigd. De waarde kan worden ingesteld op Infinity
(of 0
) om een onbeperkt aantal listeners aan te geven.
Retourneert een verwijzing naar de EventEmitter
, zodat aanroepen kunnen worden gekoppeld.
function setMaxListeners(n: number): Twin
Parameters
- n
-
number
Retouren
overgenomen van EventEmitter.setMaxListeners
setMaxListeners(number, (EventEmitter<{}> | EventTarget)[])
import { setMaxListeners, EventEmitter } from 'node:events';
const target = new EventTarget();
const emitter = new EventEmitter();
setMaxListeners(5, target, emitter);
static function setMaxListeners(n?: number, eventTargets: (EventEmitter<{}> | EventTarget)[])
Parameters
- n
-
number
Een niet-negatief getal. Het maximum aantal listeners per EventTarget
gebeurtenis.
- eventTargets
-
(EventEmitter<{}> | EventTarget)[]
Nul of meer exemplaren van {EventTarget} of {EventEmitter}. Als er geen items zijn opgegeven, wordt n
ingesteld als de standaardlimiet voor alle nieuw gemaakte objecten {EventTarget} en {EventEmitter}.
overgenomen van EventEmitter.setMaxListeners
[captureRejectionSymbol](Error, string | symbol, any[])
function [captureRejectionSymbol](error: Error, event: string | symbol, args: any[])
Parameters
- error
-
Error
- event
-
string | symbol
- args
-
any[]
overgenomen van EventEmitter.__@captureRejectionSymbol@178
[captureRejectionSymbol]<EventName>(Error, EventName, Args<{}, EventName>)
function [captureRejectionSymbol]<EventName>(error: Error, event: EventName, args: Args<{}, EventName>)
Parameters
- error
-
Error
- event
-
EventName
- args
-
Args<{}, EventName>
overgenomen van EventEmitter.__@captureRejectionSymbol@178