Определяем без каких-либо фреймворков и библиотек:

HTMLDocument.prototype.ready = function () {
	return new Promise(function(resolve, reject) {
		if (document.readyState === 'complete') {
			resolve(document);
		} else {
			document.addEventListener('DOMContentLoaded', function() {
				resolve(document);
			});
		}
	});
}

Пример использования:

document.ready().then(function() {
	// ...
});

Теги: сниппет, javascript