Skip to content

Instantly share code, notes, and snippets.

@bang9
Last active April 19, 2023 11:36
Show Gist options
  • Save bang9/90d383ad3adbf0f79971105d70e6dc2a to your computer and use it in GitHub Desktop.
Save bang9/90d383ad3adbf0f79971105d70e6dc2a to your computer and use it in GitHub Desktop.
deferred example
const deferredMap = new Map<string, Deferred>();
const someLogicOnlyAvailableInHere = () => { ... };
const App = () => {
useEffect(() => {
// 이 영역에서만 핸들링이 가능한 케이스, ex) 웹뷰 통신이나 일렉트론에서 렌더러와의 ipc 통신 등..
eventEmitter.addListener('event', (event) => {
const deferred = deferredMap.get(event.promiseId);
if(deferred) {
const response = someLogicOnlyAvailableInHere(event.data);
deferred.resolve(response);
}
})
},[])
return <View />
}
// deferred 를 사용하지 않은 경우, 이벤트 결과를 받기 위해서 리스너를 추가한다던가 다른 방법이 필요
observer.emit('event', { data });
observer.addListener('response', (response) => { ... })
// deferred 를 사용한 경우, deferred 를 통해서 다른곳에서 resolve 를 시켜서 받을 수 있음
function emitEvent() {
const promiseId = uuid();
const deferred = new Deferred();
deferredMap.set(id, deferred);
eventEmitter.emit('event', { data, promiseId });
return deferred.promise;
}
const response = await emitEvent();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment