我有一个在NodeJS上运行的打字稿应用程序,其中使用Event Emitter类在变量值更改时发出事件。
我想等待事件继续进行,因此我需要在打字稿代码中引起等待。
这就是我在做什么,
if (StreamManagement.instance.activeStreams.get(streamObj.streamContext).streamState === 'Paused') {
await StreamManagement.instance.waitForStreamActive(streamObj);
}
这是我的waitForStreamActive方法,
public async waitForStreamActive(stream: Stream) {
const eventEmitter = new EventEmitter();
return new Promise(( resolve ) => {
eventEmitter.on('resume', resolve );
});
}
然后触发这样的发射事件,
public async updateStream(streamContext: string, state: boolean): Promise<string> {
const eventEmitter = new EventEmitter();
if (state === Resume) {
const streamState = StreamManagement.instance.activeStreams.get(streamContext).streamState = 'Active';
eventEmitter.emit('resume');
return streamState;
}
}
这三个代码段都位于不同的类和不同的文件中。
此代码段似乎不符合我的预期。
我想在javascript中等待,直到诺言解决。直到状态更改为恢复。
有人可以指出我要去哪里吗?
答案 0 :(得分:1)
有人可以指出我要去哪里吗?
您有两个不同 EventEmitter
个。一个EventEmitter
上触发的事件不会触发其他事件。
在相同的 EventEmitter
上触发并监听。也就是说,Promise
对于返回 multiple 次的事物不是正确的抽象。 Promise
只能一次解析,而事件可以触发多次。建议按原样使用EventEmitter
,或使用其他流抽象,例如Observable
答案 1 :(得分:1)
EventEmmitter(易记模式)和Promise(责任链模式),它们具有不同的义务。我看到您想同时使用它们。在您的情况下,这并非不可能,因为EventEmitter并非为链接观察者处理器而设计。仅使用简单的Promise和构建器。有一个很好的RxJS库,它提供了很多功能。它可以满足您的要求:使用同步/异步链接案例构建事件驱动的体系结构。