Last active
April 19, 2023 11:36
-
-
Save bang9/90d383ad3adbf0f79971105d70e6dc2a to your computer and use it in GitHub Desktop.
deferred example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const deferredMap = new Map<string, Deferred>(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 /> | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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