тривиальная задача: выполнять некий код строго после DOMContentLoaded
но ведь если оно уже было, то подписываться на него бесполезно
императивно был бы мрак из if
сори за ts - но вот мой обычный снипет:
import {curry, pipe, propOr, either, identical} from 'ramda';
import {selfCall} from '@/lib/functions';
export const subscribe = curry((target: EventTarget, eventName: string, handler: EventListenerOrEventListenerObject) => {
target.addEventListener(eventName, handler);
return () => target.removeEventListener(eventName, handler);
});
const isDocumentReady = pipe(
propOr<string>('', 'readyState'),
either(
identical('complete'),
identical('interactive')
)
);
export function domReady(doc: Document = document): Promise<void> {
return (isDocumentReady(doc)
? Promise.resolve()
: new Promise((resolve): void => selfCall(solve => [
subscribe(doc, 'DOMContentLoaded', solve),
subscribe(doc.defaultView!, 'load', solve),
resolve
]))
);
}
вставил, и теперь просто пишу
domReady().then(() => ...
Я теперь понял почему я не понимаю rxjs
Обсуждают сегодня