1234567891011121314151617181920212223242526272829303132 |
- // @ts-check
- /**
- * @param {(() => void) | (() => Promise<void>)} callback
- * @returns {Promise<void>}
- */
- export default function ready(callback) {
- return new Promise((resolve, reject) => {
- function loaded() {
- let result;
- try {
- result = callback();
- } catch (err) {
- reject(err);
- return;
- }
- if (typeof result?.then === 'function') {
- result.then(resolve).catch(reject);
- } else {
- resolve();
- }
- }
- if (['interactive', 'complete'].includes(document.readyState)) {
- loaded();
- } else {
- document.addEventListener('DOMContentLoaded', loaded);
- }
- });
- }
|