다음을 통해 공유


Twin class

디바이스 쌍은 Azure IoT Hub에 의해 저장되고 디바이스가 오프라인인 경우에도 사용할 수 있는 디바이스의 상태를 설명하는 문서입니다. 다음 3개 섹션을 중심으로 빌드됩니다.

  • 태그: 서비스 쪽에서만 액세스할 수 있는 키/값 쌍
  • Desired 속성: 서비스에 의해 업데이트되고 디바이스에서 수신됨
  • Reported 속성: 디바이스에서 업데이트되고 서비스에서 수신합니다.

가능하지만 desired 및 reported 속성은 일치할 필요가 없으며 필요한 경우 이러한 두 컬렉션을 동기화하는 논리는 SDK 사용자에게 둡니다.

자세한 내용은 디바이스 쌍 이해를 참조하세요.

Extends

EventEmitter

속성

desiredPath
errorEvent
properties

desired 및 reported 속성 사전(각각 및 properties.reported)properties.desired입니다.

userRegisteredDesiredPropertiesListener

상속된 속성

captureRejections

값: 부울

모든 새 EventEmitter 개체에 대한 기본 captureRejections 옵션을 변경합니다.

captureRejectionSymbol

값: Symbol.for('nodejs.rejection')

사용자 지정 rejection handler를 작성하는 방법을 참조하세요.

defaultMaxListeners

기본적으로 모든 단일 이벤트에 대해 최대 10 수신기를 등록할 수 있습니다. 메서드를 사용하여 emitter.setMaxListeners(n) 개별 EventEmitter 인스턴스에 대해 이 제한을 변경할 수 있습니다. 모든EventEmitter 인스턴스의 기본값을 events.defaultMaxListeners 변경하려면 속성을 사용할 수 있습니다. 이 값이 양수가 아니면 이 RangeError throw됩니다.

를 설정할 events.defaultMaxListeners 때는 변경 내용이 변경되기 전에 만든 인스턴스를 포함하여 모든EventEmitter 인스턴스에 영향을 주므로 주의해야 합니다. 그러나 호출 emitter.setMaxListeners(n) 은 여전히 보다 events.defaultMaxListeners우선합니다.

이것은 하드 제한이 아닙니다. EventEmitter instance 더 많은 수신기를 추가할 수 있지만 "가능한 EventEmitter 메모리 누수"가 검색되었음을 나타내는 추적 경고를 stderr에 출력합니다. 단일 EventEmitter의 경우 및 emitter.setMaxListeners() 메서드를 emitter.getMaxListeners() 사용하여 이 경고를 일시적으로 방지할 수 있습니다.

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));
});

명령줄 플래그를 --trace-warnings 사용하여 이러한 경고에 대한 스택 추적을 표시할 수 있습니다.

내보낸 경고는 를 사용하여 process.on('warning') 검사할 수 있으며 이벤트 송신기 instance, 이벤트의 이름 및 count 연결된 수신기 수를 각각 참조하는 추가 emitter, type및 속성이 있습니다. 해당 name 속성은 로 설정됩니다 'MaxListenersExceededWarning'.

errorMonitor

이 기호는 모니터링 이벤트에 대해서만 수신기를 설치하는 'error' 데 사용됩니다. 이 기호를 사용하여 설치된 수신기는 일반 'error' 수신기가 호출되기 전에 호출됩니다.

이 기호를 사용하여 수신기를 설치해도 이벤트가 내보내지면 'error' 동작이 변경되지 않습니다. 따라서 일반 'error' 수신기가 설치되지 않은 경우에도 프로세스가 중단됩니다.

메서드

get()
get(Callback<Twin>)

서비스에서 전체 트윈을 가져옵니다.

상속된 메서드

addAbortListener(AbortSignal, (event: Event) => void)

제공된 signalabort 이벤트를 한 번 수신 대기합니다.

중단 신호에서 abort 이벤트를 수신 대기하는 것은 안전하지 않으며 신호가 있는 다른 타사에서 를 호출 e.stopImmediatePropagation()할 수 있으므로 리소스 누수로 이어질 수 있습니다. 불행히도 Node.js 웹 표준을 위반하기 때문에 이를 변경할 수 없습니다. 또한 원래 API를 사용하면 수신기를 쉽게 제거할 수 있습니다.

이 API를 사용하면 수신기가 실행되지 않도록 이벤트를 stopImmediatePropagation 수신 대기하여 이러한 두 가지 문제를 해결하여 Node.js API에서 s를 안전하게 사용할 AbortSignal수 있습니다.

더 쉽게 구독을 취소할 수 있도록 삭제 가능 항목을 반환합니다.

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]();
  }
}
addListener<K>(string | symbol, (args: any[]) => void)

의 별칭입니다 emitter.on(eventName, listener).

emit<K>(string | symbol, AnyRest)

라는 이벤트에 eventName대해 등록된 각 수신기를 등록 순서대로 동기적으로 호출하여 제공된 인수를 각각에 전달합니다.

이벤트에 수신기가 있으면 를 반환하고, false 그렇지 않으면 를 반환 true 합니다.

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
eventNames()

방출기가 수신기를 등록한 이벤트를 나열하는 배열을 반환합니다. 배열의 값은 문자열 또는 Symbols입니다.

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) ]
getEventListeners(EventEmitter<DefaultEventMap> | EventTarget, string | symbol)

라는 eventName이벤트에 대한 수신기 배열의 복사본을 반환합니다.

의 경우 EventEmitter이 동작은 방출기에서 를 호출하는 .listeners 것과 정확히 동일합니다.

의 경우 EventTarget이벤트 대상에 대한 이벤트 수신기를 가져오는 유일한 방법입니다. 이는 디버깅 및 진단 목적으로 유용합니다.

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] ]
}
getMaxListeners()

로 설정 emitter.setMaxListeners(n) 되거나 기본값인 의 EventEmitter 현재 최대 수신기 값을 defaultMaxListeners로 반환합니다.

getMaxListeners(EventEmitter<DefaultEventMap> | EventTarget)

현재 설정된 최대 수신기 양을 반환합니다.

의 경우 EventEmitter이 동작은 방출기에서 를 호출하는 .getMaxListeners 것과 정확히 동일합니다.

의 경우 EventTarget이벤트 대상에 대한 최대 이벤트 수신기를 가져오는 유일한 방법입니다. 단일 EventTarget의 이벤트 처리기 수가 최대 집합을 초과하는 경우 EventTarget은 경고를 출력합니다.

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
}
listenerCount(EventEmitter<DefaultEventMap>, string | symbol)

지정된 emitter에 등록된 에 eventName 대한 수신기 수를 반환하는 클래스 메서드입니다.

import { EventEmitter, listenerCount } from 'node:events';

const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(listenerCount(myEmitter, 'event'));
// Prints: 2
listenerCount<K>(string | symbol, Function)

라는 eventName이벤트를 수신 대기하는 수신기 수를 반환합니다. 가 제공되면 listener 이벤트 수신기 목록에서 수신기가 발견된 횟수를 반환합니다.

listeners<K>(string | symbol)

라는 eventName이벤트에 대한 수신기 배열의 복사본을 반환합니다.

server.on('connection', (stream) => {
  console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
off<K>(string | symbol, (args: any[]) => void)

의 별칭입니다 emitter.removeListener().

on(EventEmitter<DefaultEventMap>, string, StaticEventEmitterOptions)
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

AsyncIterator 이벤트를 반복하는 를 반환합니다eventName. 가 내보내면 EventEmitter throw됩니다.'error' 루프를 종료할 때 모든 수신기를 제거합니다. 각 반복에서 반환되는 는 value 내보낸 이벤트 인수로 구성된 배열입니다.

AbortSignal 사용하여 이벤트 대기 대기를 취소할 수 있습니다.

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());
on<K>(string | symbol, (args: any[]) => void)

listener 라는 eventName이벤트의 수신기 배열 끝에 함수를 추가합니다. 가 이미 추가되었는지 확인하기 listener 위한 검사가 수행되지 않습니다. 및 listenereventName 동일한 조합을 전달하는 여러 호출은 가 여러 번 추가되고 호출됩니다listener.

server.on('connection', (stream) => {
  console.log('someone connected!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

기본적으로 이벤트 수신기는 추가된 순서대로 호출됩니다. 메서드를 emitter.prependListener() 수신기 배열의 시작 부분에 이벤트 수신기를 추가 하는 대안으로 사용할 수 있습니다.

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
once(EventEmitter<DefaultEventMap>, string | symbol, StaticEventEmitterOptions)

Promise 가 지정된 이벤트를 내보낸 경우 EventEmitter 처리되거나 대기하는 동안 내보내는 경우 EventEmitter 거부되는 을 'error' 만듭니다. 는 Promise 지정된 이벤트에 내보낸 모든 인수의 배열로 resolve.

이 메서드는 의도적으로 제네릭이며 특별한'error' 이벤트 의미 체계가 없고 이벤트를 수신 대기하지 않는 웹 플랫폼 EventTarget 인터페이스에서 'error' 작동합니다.

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);
}

이벤트의 특수 처리 'error' 는 가 다른 이벤트를 기다리는 데 사용되는 경우에만 사용됩니다 events.once() . 가 'error' 이벤트 자체를 기다리는 데 사용되는 경우 events.once() 특별한 처리 없이 다른 종류의 이벤트로 처리됩니다.

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

AbortSignal 사용하여 이벤트 대기를 취소할 수 있습니다.

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!
once(EventTarget, string, StaticEventEmitterOptions)
once<K>(string | symbol, (args: any[]) => void)

라는 eventName이벤트에 대한 일회성listener 함수를 추가합니다. 다음에 eventName 트리거되면 이 수신기가 제거된 다음 호출됩니다.

server.once('connection', (stream) => {
  console.log('Ah, we have our first user!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

기본적으로 이벤트 수신기는 추가된 순서대로 호출됩니다. 메서드를 emitter.prependOnceListener() 수신기 배열의 시작 부분에 이벤트 수신기를 추가 하는 대안으로 사용할 수 있습니다.

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
prependListener<K>(string | symbol, (args: any[]) => void)

listener 라는 eventName이벤트에 대한 수신기 배열의 시작 부분에 함수를 추가합니다. 가 이미 추가되었는지 확인하기 listener 위한 검사가 수행되지 않습니다. 및 listenereventName 동일한 조합을 전달하는 여러 호출은 가 여러 번 추가되고 호출됩니다listener.

server.prependListener('connection', (stream) => {
  console.log('someone connected!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

prependOnceListener<K>(string | symbol, (args: any[]) => void)

라는 eventName 이벤트에 대한 일회성listener 함수를 수신기 배열의 시작 부분에 추가합니다. 다음에 eventName 트리거되면 이 수신기가 제거된 다음 호출됩니다.

server.prependOnceListener('connection', (stream) => {
  console.log('Ah, we have our first user!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

rawListeners<K>(string | symbol)

래퍼(예: 에서 만든 래퍼)를 포함하여 라는 eventName이벤트에 대한 수신기 배열의 복사본을 .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');
removeAllListeners(string | symbol)

모든 수신기 또는 지정된 eventName의 수신기를 제거합니다.

특히 다른 구성 요소 또는 모듈(예: 소켓 또는 파일 스트림)에서 instance 만든 경우 EventEmitter 코드의 다른 곳에 추가된 수신기를 제거하는 것이 좋지 않습니다.

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

removeListener<K>(string | symbol, (args: any[]) => void)

라는 eventName이벤트의 수신기 배열에서 지정된 listener 을 제거합니다.

const callback = (stream) => {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

removeListener()는 수신기 배열에서 수신기의 instance 하나만 제거합니다. 단일 수신기가 지정된 의 수신기 배열에 여러 번 추가된 eventNameremoveListener() 경우 각 instance 제거하려면 여러 번 호출해야 합니다.

이벤트가 내보내지면 내보낸 시점에 연결된 모든 수신기가 순서대로 호출됩니다. 이는 내보내기 마지막 수신기가 removeListener() 실행을 완료하기 전에 또는 removeAllListeners() 호출이 진행 중에서emit() 제거되지 않음을 의미합니다. 후속 이벤트는 예상대로 동작합니다.

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

수신기는 내부 배열을 사용하여 관리되므로 이를 호출하면 수신기가 제거된 등록된 모든 수신기의 위치 인덱스가 변경됩니다. 이는 수신기가 호출되는 순서에는 영향을 주지 않지만 메서드에서 반환 emitter.listeners() 된 수신기 배열의 복사본을 다시 만들어야 한다는 의미입니다.

단일 함수가 단일 이벤트에 대한 처리기로 여러 번 추가된 경우(아래 예제와 같이) removeListener() 가장 최근에 추가된 instance 제거합니다. 예제에서 수신기는 once('ping') 제거됩니다.

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');

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

setMaxListeners(number)

기본적으로 EventEmitters는 특정 이벤트에 대해 수신기가 10 추가되는 경우 경고를 출력합니다. 이는 메모리 누수 찾기에 도움이 되는 유용한 기본값입니다. emitter.setMaxListeners() 메서드를 사용하면 이 특정 EventEmitter instance 대한 제한을 수정할 수 있습니다. 값은 (또는 0)로 Infinity 설정하여 무제한 수신기 수를 나타낼 수 있습니다.

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

setMaxListeners(number, (EventEmitter<DefaultEventMap> | EventTarget)[])
import { setMaxListeners, EventEmitter } from 'node:events';

const target = new EventTarget();
const emitter = new EventEmitter();

setMaxListeners(5, target, emitter);
[captureRejectionSymbol]<K>(Error, string | symbol, AnyRest)

속성 세부 정보

desiredPath

static desiredPath: string

속성 값

string

errorEvent

static errorEvent: string

속성 값

string

properties

desired 및 reported 속성 사전(각각 및 properties.reported)properties.desired입니다.

properties: TwinProperties

속성 값

userRegisteredDesiredPropertiesListener

userRegisteredDesiredPropertiesListener: boolean

속성 값

boolean

상속된 속성 세부 정보

captureRejections

값: 부울

모든 새 EventEmitter 개체에 대한 기본 captureRejections 옵션을 변경합니다.

static captureRejections: boolean

속성 값

boolean

상속된 From EventEmitter.captureRejections

captureRejectionSymbol

값: Symbol.for('nodejs.rejection')

사용자 지정 rejection handler를 작성하는 방법을 참조하세요.

static captureRejectionSymbol: typeof captureRejectionSymbol

속성 값

typeof captureRejectionSymbol

상속된 From EventEmitter.captureRejectionSymbol

defaultMaxListeners

기본적으로 모든 단일 이벤트에 대해 최대 10 수신기를 등록할 수 있습니다. 메서드를 사용하여 emitter.setMaxListeners(n) 개별 EventEmitter 인스턴스에 대해 이 제한을 변경할 수 있습니다. 모든EventEmitter 인스턴스의 기본값을 events.defaultMaxListeners 변경하려면 속성을 사용할 수 있습니다. 이 값이 양수가 아니면 이 RangeError throw됩니다.

를 설정할 events.defaultMaxListeners 때는 변경 내용이 변경되기 전에 만든 인스턴스를 포함하여 모든EventEmitter 인스턴스에 영향을 주므로 주의해야 합니다. 그러나 호출 emitter.setMaxListeners(n) 은 여전히 보다 events.defaultMaxListeners우선합니다.

이것은 하드 제한이 아닙니다. EventEmitter instance 더 많은 수신기를 추가할 수 있지만 "가능한 EventEmitter 메모리 누수"가 검색되었음을 나타내는 추적 경고를 stderr에 출력합니다. 단일 EventEmitter의 경우 및 emitter.setMaxListeners() 메서드를 emitter.getMaxListeners() 사용하여 이 경고를 일시적으로 방지할 수 있습니다.

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));
});

명령줄 플래그를 --trace-warnings 사용하여 이러한 경고에 대한 스택 추적을 표시할 수 있습니다.

내보낸 경고는 를 사용하여 process.on('warning') 검사할 수 있으며 이벤트 송신기 instance, 이벤트의 이름 및 count 연결된 수신기 수를 각각 참조하는 추가 emitter, type및 속성이 있습니다. 해당 name 속성은 로 설정됩니다 'MaxListenersExceededWarning'.

static defaultMaxListeners: number

속성 값

number

상속된 From EventEmitter.defaultMaxListeners

errorMonitor

이 기호는 모니터링 이벤트에 대해서만 수신기를 설치하는 'error' 데 사용됩니다. 이 기호를 사용하여 설치된 수신기는 일반 'error' 수신기가 호출되기 전에 호출됩니다.

이 기호를 사용하여 수신기를 설치해도 이벤트가 내보내지면 'error' 동작이 변경되지 않습니다. 따라서 일반 'error' 수신기가 설치되지 않은 경우에도 프로세스가 중단됩니다.

static errorMonitor: typeof errorMonitor

속성 값

typeof errorMonitor

상속된 From EventEmitter.errorMonitor

메서드 세부 정보

get()

function get(): Promise<Twin>

반환

Promise<Twin>

get(Callback<Twin>)

서비스에서 전체 트윈을 가져옵니다.

function get(callback?: Callback<Twin>)

매개 변수

callback

Callback<Twin>

선택적 함수는 전송이 트윈을 검색하지 못하는 경우 트윈 또는 오류와 함께 다시 호출되어야 합니다.

상속된 메서드 세부 정보

addAbortListener(AbortSignal, (event: Event) => void)

제공된 signalabort 이벤트를 한 번 수신 대기합니다.

중단 신호에서 abort 이벤트를 수신 대기하는 것은 안전하지 않으며 신호가 있는 다른 타사에서 를 호출 e.stopImmediatePropagation()할 수 있으므로 리소스 누수로 이어질 수 있습니다. 불행히도 Node.js 웹 표준을 위반하기 때문에 이를 변경할 수 없습니다. 또한 원래 API를 사용하면 수신기를 쉽게 제거할 수 있습니다.

이 API를 사용하면 수신기가 실행되지 않도록 이벤트를 stopImmediatePropagation 수신 대기하여 이러한 두 가지 문제를 해결하여 Node.js API에서 s를 안전하게 사용할 AbortSignal수 있습니다.

더 쉽게 구독을 취소할 수 있도록 삭제 가능 항목을 반환합니다.

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

매개 변수

signal

AbortSignal

resource

(event: Event) => void

반환

Disposable

수신기를 abort 제거하는 삭제 가능 항목입니다.

상속된 위치에서 EventEmitter.addAbortListener

addListener<K>(string | symbol, (args: any[]) => void)

의 별칭입니다 emitter.on(eventName, listener).

function addListener<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

listener

(args: any[]) => void

반환

상속된 위치에서 EventEmitter.addListener

emit<K>(string | symbol, AnyRest)

라는 이벤트에 eventName대해 등록된 각 수신기를 등록 순서대로 동기적으로 호출하여 제공된 인수를 각각에 전달합니다.

이벤트에 수신기가 있으면 를 반환하고, false 그렇지 않으면 를 반환 true 합니다.

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<K>(eventName: string | symbol, args: AnyRest): boolean

매개 변수

eventName

string | symbol

args

AnyRest

반환

boolean

상속된 위치에서 EventEmitter.emit

eventNames()

방출기가 수신기를 등록한 이벤트를 나열하는 배열을 반환합니다. 배열의 값은 문자열 또는 Symbols입니다.

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)[]

반환

(string | symbol)[]

상속된 위치에서 EventEmitter.eventNames

getEventListeners(EventEmitter<DefaultEventMap> | EventTarget, string | symbol)

라는 eventName이벤트에 대한 수신기 배열의 복사본을 반환합니다.

의 경우 EventEmitter이 동작은 방출기에서 를 호출하는 .listeners 것과 정확히 동일합니다.

의 경우 EventTarget이벤트 대상에 대한 이벤트 수신기를 가져오는 유일한 방법입니다. 이는 디버깅 및 진단 목적으로 유용합니다.

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(emitter: EventEmitter<DefaultEventMap> | EventTarget, name: string | symbol): Function[]

매개 변수

emitter

EventEmitter<DefaultEventMap> | EventTarget

name

string | symbol

반환

Function[]

상속된 위치에서 EventEmitter.getEventListeners

getMaxListeners()

로 설정 emitter.setMaxListeners(n) 되거나 기본값인 의 EventEmitter 현재 최대 수신기 값을 defaultMaxListeners로 반환합니다.

function getMaxListeners(): number

반환

number

상속된 위치에서 EventEmitter.getMaxListeners

getMaxListeners(EventEmitter<DefaultEventMap> | EventTarget)

현재 설정된 최대 수신기 양을 반환합니다.

의 경우 EventEmitter이 동작은 방출기에서 를 호출하는 .getMaxListeners 것과 정확히 동일합니다.

의 경우 EventTarget이벤트 대상에 대한 최대 이벤트 수신기를 가져오는 유일한 방법입니다. 단일 EventTarget의 이벤트 처리기 수가 최대 집합을 초과하는 경우 EventTarget은 경고를 출력합니다.

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<DefaultEventMap> | EventTarget): number

매개 변수

emitter

EventEmitter<DefaultEventMap> | EventTarget

반환

number

상속된 위치에서 EventEmitter.getMaxListeners

listenerCount(EventEmitter<DefaultEventMap>, string | symbol)

경고

이 API는 이제 사용되지 않습니다.

Since v3.2.0 - Use listenerCount instead.

지정된 emitter에 등록된 에 eventName 대한 수신기 수를 반환하는 클래스 메서드입니다.

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<DefaultEventMap>, eventName: string | symbol): number

매개 변수

emitter

EventEmitter<DefaultEventMap>

쿼리할 방출기

eventName

string | symbol

이벤트 이름

반환

number

상속된 위치에서 EventEmitter.listenerCount

listenerCount<K>(string | symbol, Function)

라는 eventName이벤트를 수신 대기하는 수신기 수를 반환합니다. 가 제공되면 listener 이벤트 수신기 목록에서 수신기가 발견된 횟수를 반환합니다.

function listenerCount<K>(eventName: string | symbol, listener?: Function): number

매개 변수

eventName

string | symbol

수신 대기 중인 이벤트의 이름

listener

Function

이벤트 처리기 함수

반환

number

상속된 위치에서 EventEmitter.listenerCount

listeners<K>(string | symbol)

라는 eventName이벤트에 대한 수신기 배열의 복사본을 반환합니다.

server.on('connection', (stream) => {
  console.log('someone connected!');
});
console.log(util.inspect(server.listeners('connection')));
// Prints: [ [Function] ]
function listeners<K>(eventName: string | symbol): Function[]

매개 변수

eventName

string | symbol

반환

Function[]

상속된 위치에서 EventEmitter.listeners

off<K>(string | symbol, (args: any[]) => void)

의 별칭입니다 emitter.removeListener().

function off<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

listener

(args: any[]) => void

반환

상속된 위치에서 EventEmitter.off

on(EventEmitter<DefaultEventMap>, string, StaticEventEmitterOptions)

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

AsyncIterator 이벤트를 반복하는 를 반환합니다eventName. 가 내보내면 EventEmitter throw됩니다.'error' 루프를 종료할 때 모든 수신기를 제거합니다. 각 반복에서 반환되는 는 value 내보낸 이벤트 인수로 구성된 배열입니다.

AbortSignal 사용하여 이벤트 대기 대기를 취소할 수 있습니다.

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());
static function on(emitter: EventEmitter<DefaultEventMap>, eventName: string, options?: StaticEventEmitterOptions): AsyncIterableIterator<any>

매개 변수

emitter

EventEmitter<DefaultEventMap>

eventName

string

수신 대기 중인 이벤트의 이름

options

StaticEventEmitterOptions

반환

AsyncIterableIterator<any>

AsyncIterator 가 내보낸 이벤트를 반복 eventName 하는 입니다.emitter

상속된 위치에서 EventEmitter.on

on<K>(string | symbol, (args: any[]) => void)

listener 라는 eventName이벤트의 수신기 배열 끝에 함수를 추가합니다. 가 이미 추가되었는지 확인하기 listener 위한 검사가 수행되지 않습니다. 및 listenereventName 동일한 조합을 전달하는 여러 호출은 가 여러 번 추가되고 호출됩니다listener.

server.on('connection', (stream) => {
  console.log('someone connected!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

기본적으로 이벤트 수신기는 추가된 순서대로 호출됩니다. 메서드를 emitter.prependListener() 수신기 배열의 시작 부분에 이벤트 수신기를 추가 하는 대안으로 사용할 수 있습니다.

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<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

이벤트의 이름입니다.

listener

(args: any[]) => void

콜백 함수

반환

상속된 위치에서 EventEmitter.on

once(EventEmitter<DefaultEventMap>, string | symbol, StaticEventEmitterOptions)

Promise 가 지정된 이벤트를 내보낸 경우 EventEmitter 처리되거나 대기하는 동안 내보내는 경우 EventEmitter 거부되는 을 'error' 만듭니다. 는 Promise 지정된 이벤트에 내보낸 모든 인수의 배열로 resolve.

이 메서드는 의도적으로 제네릭이며 특별한'error' 이벤트 의미 체계가 없고 이벤트를 수신 대기하지 않는 웹 플랫폼 EventTarget 인터페이스에서 'error' 작동합니다.

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);
}

이벤트의 특수 처리 'error' 는 가 다른 이벤트를 기다리는 데 사용되는 경우에만 사용됩니다 events.once() . 가 'error' 이벤트 자체를 기다리는 데 사용되는 경우 events.once() 특별한 처리 없이 다른 종류의 이벤트로 처리됩니다.

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

AbortSignal 사용하여 이벤트 대기를 취소할 수 있습니다.

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(emitter: EventEmitter<DefaultEventMap>, eventName: string | symbol, options?: StaticEventEmitterOptions): Promise<any[]>

매개 변수

emitter

EventEmitter<DefaultEventMap>

eventName

string | symbol

options

StaticEventEmitterOptions

반환

Promise<any[]>

상속된 위치에서 EventEmitter.once

once(EventTarget, string, StaticEventEmitterOptions)

static function once(emitter: EventTarget, eventName: string, options?: StaticEventEmitterOptions): Promise<any[]>

매개 변수

emitter

EventTarget

eventName

string

options

StaticEventEmitterOptions

반환

Promise<any[]>

상속된 위치에서 EventEmitter.once

once<K>(string | symbol, (args: any[]) => void)

라는 eventName이벤트에 대한 일회성listener 함수를 추가합니다. 다음에 eventName 트리거되면 이 수신기가 제거된 다음 호출됩니다.

server.once('connection', (stream) => {
  console.log('Ah, we have our first user!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

기본적으로 이벤트 수신기는 추가된 순서대로 호출됩니다. 메서드를 emitter.prependOnceListener() 수신기 배열의 시작 부분에 이벤트 수신기를 추가 하는 대안으로 사용할 수 있습니다.

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<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

이벤트의 이름입니다.

listener

(args: any[]) => void

콜백 함수

반환

상속된 위치에서 EventEmitter.once

prependListener<K>(string | symbol, (args: any[]) => void)

listener 라는 eventName이벤트에 대한 수신기 배열의 시작 부분에 함수를 추가합니다. 가 이미 추가되었는지 확인하기 listener 위한 검사가 수행되지 않습니다. 및 listenereventName 동일한 조합을 전달하는 여러 호출은 가 여러 번 추가되고 호출됩니다listener.

server.prependListener('connection', (stream) => {
  console.log('someone connected!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

function prependListener<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

이벤트의 이름입니다.

listener

(args: any[]) => void

콜백 함수

반환

상속된 위치에서 EventEmitter.prependListener

prependOnceListener<K>(string | symbol, (args: any[]) => void)

라는 eventName 이벤트에 대한 일회성listener 함수를 수신기 배열의 시작 부분에 추가합니다. 다음에 eventName 트리거되면 이 수신기가 제거된 다음 호출됩니다.

server.prependOnceListener('connection', (stream) => {
  console.log('Ah, we have our first user!');
});

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

function prependOnceListener<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

이벤트의 이름입니다.

listener

(args: any[]) => void

콜백 함수

반환

상속된 위치에서 EventEmitter.prependOnceListener

rawListeners<K>(string | symbol)

래퍼(예: 에서 만든 래퍼)를 포함하여 라는 eventName이벤트에 대한 수신기 배열의 복사본을 .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<K>(eventName: string | symbol): Function[]

매개 변수

eventName

string | symbol

반환

Function[]

상속된 위치에서 EventEmitter.rawListeners

removeAllListeners(string | symbol)

모든 수신기 또는 지정된 eventName의 수신기를 제거합니다.

특히 다른 구성 요소 또는 모듈(예: 소켓 또는 파일 스트림)에서 instance 만든 경우 EventEmitter 코드의 다른 곳에 추가된 수신기를 제거하는 것이 좋지 않습니다.

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

function removeAllListeners(eventName?: string | symbol): Twin

매개 변수

eventName

string | symbol

반환

상속된 위치에서 EventEmitter.removeAllListeners

removeListener<K>(string | symbol, (args: any[]) => void)

라는 eventName이벤트의 수신기 배열에서 지정된 listener 을 제거합니다.

const callback = (stream) => {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

removeListener()는 수신기 배열에서 수신기의 instance 하나만 제거합니다. 단일 수신기가 지정된 의 수신기 배열에 여러 번 추가된 eventNameremoveListener() 경우 각 instance 제거하려면 여러 번 호출해야 합니다.

이벤트가 내보내지면 내보낸 시점에 연결된 모든 수신기가 순서대로 호출됩니다. 이는 내보내기 마지막 수신기가 removeListener() 실행을 완료하기 전에 또는 removeAllListeners() 호출이 진행 중에서emit() 제거되지 않음을 의미합니다. 후속 이벤트는 예상대로 동작합니다.

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

수신기는 내부 배열을 사용하여 관리되므로 이를 호출하면 수신기가 제거된 등록된 모든 수신기의 위치 인덱스가 변경됩니다. 이는 수신기가 호출되는 순서에는 영향을 주지 않지만 메서드에서 반환 emitter.listeners() 된 수신기 배열의 복사본을 다시 만들어야 한다는 의미입니다.

단일 함수가 단일 이벤트에 대한 처리기로 여러 번 추가된 경우(아래 예제와 같이) removeListener() 가장 최근에 추가된 instance 제거합니다. 예제에서 수신기는 once('ping') 제거됩니다.

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');

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

function removeListener<K>(eventName: string | symbol, listener: (args: any[]) => void): Twin

매개 변수

eventName

string | symbol

listener

(args: any[]) => void

반환

상속된 위치에서 EventEmitter.removeListener

setMaxListeners(number)

기본적으로 EventEmitters는 특정 이벤트에 대해 수신기가 10 추가되는 경우 경고를 출력합니다. 이는 메모리 누수 찾기에 도움이 되는 유용한 기본값입니다. emitter.setMaxListeners() 메서드를 사용하면 이 특정 EventEmitter instance 대한 제한을 수정할 수 있습니다. 값은 (또는 0)로 Infinity 설정하여 무제한 수신기 수를 나타낼 수 있습니다.

호출을 연결할 수 있도록 에 대한 참조 EventEmitter를 반환합니다.

function setMaxListeners(n: number): Twin

매개 변수

n

number

반환

상속된 위치에서 EventEmitter.setMaxListeners

setMaxListeners(number, (EventEmitter<DefaultEventMap> | 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<DefaultEventMap> | EventTarget)[])

매개 변수

n

number

음수가 아닌 숫자입니다. 이벤트당 EventTarget 최대 수신기 수입니다.

eventTargets

(EventEmitter<DefaultEventMap> | EventTarget)[]

상속된 From EventEmitter.setMaxListeners

[captureRejectionSymbol]<K>(Error, string | symbol, AnyRest)

function [captureRejectionSymbol]<K>(error: Error, event: string | symbol, args: AnyRest)

매개 변수

error

Error

event

string | symbol

args

AnyRest

상속된 From EventEmitter.__@captureRejectionSymbol@138