퓨즈[Fusetools] 문서[Docs] 번역

  1. Home
  2. 퓨즈[Fusetools] 문서[Docs] 번역
  3. 자바스크립트 APIs
  4. 이벤트에미터[EventEmitter]

이벤트에미터[EventEmitter]

EventEmitter는 우리가 이벤트를 내보내고 들을 수 있게 하는 클래스입니다. 퓨즈의 JavaScript 모듈 중 상당수는 EventEmitter 클래스의 인스턴스입니다. 즉, 이 모듈에 정의된 메서드를 사용하여 모듈에서 정의한 이벤트에 대한 작업을 수행할 수 있습니다.

임포트하는 방법

1
var EventEmitter = require("FuseJS/EventEmitter");

EventEmitter가 임포트되어 클래스의 독자적인 인스턴스를 생성할 수 있게 되었습니다.

기본적인 사용법

다음 코드는 두 이벤트로 EventEmitter를 만들고 이벤트 중 하나에 리스너를 추가한 다음 해당 이벤트를 내보냅니다.

1
2
3
4
5
6
7
var myEmitter = new EventEmitter("myEvent1", "myEvent2");

myEmitter.on("myEvent1", function(arg) {
    console.log("myEvent1 fired with " + arg);
});

myEmitter.emit("myEvent1", "an arg");

이 코드는 “myEvent1 fired with an arg”을 인쇄합니다.

이벤트에서 Observables 만들기

때로는 이벤트가 시간이 지남에 따라 변하는 값을 나타냅니다. 이 경우 일반 콜백 대신 Observable을 사용하는 것이 더 편리할 수 있습니다. EventEmitters는 이것을 쉽게 만들어 줍니다:

1
var obs = myEmitter.observe("myEvent");

“myEvent”가 발생하면 obs는 이벤트에 전달된 인수를 포함하도록 업데이트 됩니다. 인수가 여러 개인 경우 Observable 리스트가 됩니다.

once 리스너

다음 코드는 한 번만 발생하는 “myEvent”에 리스너를 추가합니다.

1
myEmitter.once("myEvent", function() { console.log("This will be called at most once"); });

이벤트로부터 프라미스[Promise] 만들기

once 리스너를 사용하는 대신 promiseOf를 사용하면 이벤트 이름에서 JavaScript 프라미스를 만들 수 있습니다.

1
2
3
4
5
6
var prom = myEmitter.promiseOf("myEvent");
prom.then(function(args) {
    // "myEvent"는`args`와 함께 발생되었습니다.
}).catch(function rejected(reason) {
    // 'error' 이벤트가 'reason'과 함께 발생했습니다.
});

promiseOf 메소드는 “error” 이벤트(아래 참조)를 추가로 수신하고 프라미스가 발생되면 이를 거부합니다.

에러 핸들링

모든 EventEmitters에는 “error”라는 특수 내장 이벤트가 있습니다.

1
myEmitter.emit("error", "an error occurred :(");

“error”가 출력되었을 때 리스너가 없는 경우, 예외를 던집니다. 그 외에도 “error”는 일반적인 이벤트처럼 작동합니다.

클래시의 멤버들

EventEmitter([…eventNames]) 생성자

지정된 인수의 이름으로 된 새로운 EventEmitter를 구축합니다.

1
var myEmitter = new EventEmitter("anEventName", "anotherEventName");

on(eventName, func([…eventArgs]))

func을 리스너로 eventName 이벤트에 추가합니다.

1
2
3
myEmitter.on("anEventName", function(arg) {
    console.log("anEventName fired with " + arg);
});

once(eventName, func([…eventArgs]))

func을 once 리스너로 eventName에 추가합니다. 즉, func은 리스너를 추가한 후 처음 이벤트가 발생될 때만 호출됩니다.

1
2
3
myEmitter.once("myEvent1", function(arg) {
    console.log("myEvent1 fired with " + arg);
});

removeListener(eventName, func([…eventArgs]))

eventName의 리스너에서 func을 제거합니다.

1
2
3
4
5
6
var listener = function() { console.log("Hello"); };

myEmitter.on("anEventName", listener);
// 리스너는 여기에서 "anEventName"에 대해 호출됩니다.
myEmitter.removeListener("anEventName", listener);
// 리스너는 더 이상 "anEventName"으로 호출되지 않습니다.

emit(eventName, […eventArgs])

eventName를 트리거하여 eventArgs로 모든 리스너를 호출합니다.

1
2
3
4
5
myEmitter.on("anEvent", function(arg) {
    console.log("anEvent fired with " + arg);
});

myEmitter.emit("anEvent", "an arg");

eventNames()

이 EventEmitter가 서포트하는, 빌트인을 포함한, 모든 허용 이벤트의 배열을 돌려줍니다.

1
2
3
4
var myEmitter = new EventEmitter("a", "b", "c");
var eventNames = myEmitter.eventNames();

// eventNames에는 "a", "b", "c", "error", "newListener"및 "removeListener"가 있습니다.

observe(eventName)

eventName를 수신하는 observable을 작성합니다.

1
var obs = myEmitter.observe("anEvent");

promiseOf(eventName)

eventName 및 “error”를 수신하는 프라미스를 작성합니다.

1
2
3
4
5
6
var prom = myEmitter.promiseOf("anEvent");
prom.then(function(args) {
    // "anEvent"가 'args'와 함께 발생했습니다.
}).catch(function rejected(reason) {
    // "error" 이벤트가 'reason'과 함께 발생했습니다.
});

고급 멤버들

다음 함수들은 기본 사용에는 필요하지 않지만 호환성 및 고급 사용 시나리오를 위해 제공됩니다.

addListener(eventName, func([…eventArgs]))

on과 동의어.

1
2
3
myEmitter.addListener("anEvent", function(arg) {
    console.log("anEvent emitted")
});

prependListener(eventName, func([…eventArgs]))

on의 버전으로 인해 func이 eventName의 리스너 목록에서 첫 번째가 됩니다. 즉, (prependListener 또는 prependOnceListener에 대한 나중 호출이 금지됨) func은 eventName이 발생할 때 먼저 호출됩니다.

1
2
3
myEmitter.prependListener("anEvent", function(arg) {
    console.log("This will be called first when anEvent is emitted");
});

prependOnceListener(eventName, func([…eventArgs])

한 번 실행하면 func이 eventName의 리스너 목록에서 첫 번째 버전이 됩니다. 즉, (prependListener 또는 prependOnceListener에 대한 나중 호출이 금지됨) func은 eventName이 발생할 때 먼저 호출됩니다.

1
2
3
myEmitter.prependOnceListener("anEvent", function(arg) {
    console.log("This will be called first, and at most once, when anEvent is emitted");
});

registerEvent(eventName)

EventEmitter가 지원하는 허용된 이벤트 세트에 eventName를 추가합니다.

1
myEmitter.registerEvent("newEventName");

removeAllListeners([eventName])

인수와 함께 호출되어 eventName을 수신하는 모든 리스너를 제거합니다:

1
myEmitter.removeAllListeners("anEvent");

인수없이 호출되면 모든 이벤트를 수신하는 모든 리스너를 제거합니다:

1
myEmitter.removeAllListeners();

이 메소드는 일반적으로 EventEmitter를 수신하는 코드의 다른 부분에 영향을 주기 때문에 사용하지 말아야 합니다.

빌트인(Built-in, 기본 제공되는) 이벤트 이름들

위에서 언급한 “error” 이벤트 외에도 EventEmitter의 모든 인스턴스는 다음 이벤트를 제공합니다:

“newListener”(eventName, listener)

새로운 리스너가 EventEmitter에 추가되면 트리거됩니다.

1
2
3
myEmitter.on("newListener", function(eventName, listener) {
    console.log("listener added to " + eventName);
});

“removeListener”(eventName, listener)

리스너가 EventEmitter에서 제거되면 트리거됩니다.

1
2
3
myEmitter.on("removeListener", function(eventName, listener) {
    console.log("listener removed from " + eventName);
});
Was this article helpful to you? Yes No

How can we help?