--- title: CustomElementRegistry.whenDefined() slug: Web/API/CustomElementRegistry/whenDefined tags: - API - CustomElementRegistry - Method - Reference - Web Components - custom elements - whenDefined browser-compat: api.CustomElementRegistry.whenDefined ---
{{APIRef("CustomElementRegistry")}}
O whenDefined()
é um método de {{domxref("CustomElementRegistry")}} e a interface retorna uma {{jsxref("Promise")}} que é resolvido quando o elemento nomeado é
definido.
customElements.whenDefined(name): Promise<CustomElementConstructor>;
A {{jsxref("Promise")}} que será cumprida com o elemento personalizado's construtor quando um custom element torna-se definido com o nome fornecido. (Se o custom element já foi definido, a promessa devolvida será imediatamente cumprida.)
Exceção | Descrição |
---|---|
SyntaxError |
Se o nome fornecido não for um nome de elemento personalizado válido, a promessa
rejeita com um SyntaxError .
|
Este exemplo usa whenDefined()
para detectar quando os elementos personalizados que compõem um menu são definidos. O menu exibe o conteúdo do espaço reservado até que o conteúdo do
menu real esteja pronto para ser exibido.
<nav id="menu-container"> <div class="menu-placeholder">Loading...</div> <nav-menu> <menu-item>Item 1</menu-item> <menu-item>Item 2</menu-item> ... <menu-item>Item N</menu-item> </nav-menu> </nav>
const container = document.getElementById('menu-container'); const placeholder = container.querySelector('.menu-placeholder'); // Busca todos os filhos do menu que ainda não foram definidos. const undefinedElements = container.querySelectorAll(':not(:defined)'); async function removePlaceholder(){ const promises = [...undefinedElements].map( button => customElements.whenDefined(button.localName) ); // Espere que todos os filhos sejam atualizados await Promise.all(promises); // em seguida, remova o espaço reservado container.removeChild(placeholder); } removePlaceholder();
{{Compat}}