Tengo una clase para recargar algunos elementos.
const getMe = async () => await fetchURL("https://MY.SITE/api/users/me") .then((res) => res.data); class loader { EVERYonceWHENmethodCALLED() { self.ME = (async () => await getMe())(); } me() { $("#me").html(`${self.ME.grade}${self.ME.number}[Tickets: ${self.ME.likeTicket}]`); } // ** likeTicket depends on ME ** async chart() { if ($("body").find("#chart").length) { const musicChart = await fetchURL(`https://MY.SITE/api/music/chart?&gender=${self.ME.gender}`); $("#chart").html(await listElementsOf(musicChart.data.list)); } // ** listElementsOf depends on ME ( It lets me know what musics I 'liked' to ) ** } async search(q) { if ($("body").find("#searchResult").length){ if(q) $("#searchResult").attr("data-q", q); else q = $("#searchResult").attr("data-q"); const searchResult = await fetchURL(`https://MY.SITE/api/music/search?q=${q}`); $("#searchResult").html(await listElementsOf(searchResult)); } } meAndChart() { self.me(); self.chart(); } loadEverything() { self.meAndChart(); self.search(); } } Necesito recargar ME antes de recargar cualquier otro elemento, y estoy buscando una manera de hacerlo. Puedo emplear new como new loader.me(); , pero no quiero usar new cada vez.
¿Hay alguna manera para el trabajo previsto? Gracias por leer.
Hice algunos cambios en tu código:
EVERYonceWHENmethodCALLED para que ME se establezca en el objeto esperado en lugar de una promesa.this en lugar de self para el objeto actual (ver aquí para más detalles).me cambió el nombre y chart a _me y _chart respectivamente.me y chart que llaman a los métodos internos después de EVERYonceWHENmethodCALLED .meAndChart actualizado para llamar a los métodos internos después de EVERYonceWHENmethodCALLED . Tenga en cuenta que generalmente es una buena práctica (y a menudo necesaria) llamar a funciones async con await , y eso requiere que las funciones de llamada también sean async .
const getMe = async () => await fetchURL("https://MY.SITE/api/users/me") .then((res) => res.data); class loader { async EVERYonceWHENmethodCALLED() { this.ME = await getMe(); } _me() { $("#me").html(`${this.ME.grade}${this.ME.number}[Tickets: ${self.ME.likeTicket}]`); } // ** likeTicket depends on ME ** async _chart() { if ($("body").find("#chart").length) { const musicChart = await fetchURL(`https://MY.SITE/api/music/chart?&gender=${self.ME.gender}`); $("#chart").html(await listElementsOf(musicChart.data.list)); } // ** listElementsOf depends on ME ( It lets me know what musics I 'liked' to ) ** } async me() { await this.EVERYonceWHENmethodCALLED(); this._me(); } async chart() { await this.EVERYonceWHENmethodCALLED(); await this._chart(); } async search(q) { if ($("body").find("#searchResult").length){ if(q) $("#searchResult").attr("data-q", q); else q = $("#searchResult").attr("data-q"); const searchResult = await fetchURL(`https://MY.SITE/api/music/search?q=${q}`); $("#searchResult").html(await listElementsOf(searchResult)); } } async meAndChart() { await this.EVERYonceWHENmethodCALLED(); this._me(); await this._chart(); } async loadEverything() { await this.meAndChart(); await this.search(); } }