Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { EventEmitter } from 'events';
- export const bus = new EventEmitter();
- function Deferred() {
- const result = {};
- result.promise = new Promise((resolve, reject) => {
- result.resolve = resolve;
- result.reject = reject;
- });
- return result;
- }
- export default function once(resetKey, callback) {
- let defer = null,
- result = null;
- const doAction = () => {
- defer = Deferred();
- result = defer.promise.then(callback);
- const errorHandler = () =>
- result.catch(e => {
- defer = Deferred();
- result = defer.promise.then(callback);
- errorHandler();
- throw e;
- });
- errorHandler();
- };
- doAction();
- if (resetKey) {
- bus.on(resetKey, doAction);
- }
- return function(...args) {
- defer.resolve(...args);
- return result;
- };
- }
Add Comment
Please, Sign In to add comment