Dado el ejemplo a continuación, si quisiera await a player.play() , ¿tengo que agregar async en DOS lugares ya que foo será finalmente la función ejecutada?
ejemplo:
const foo = (player) => { let foo = videojs; foo.addEventListener('ready', () => { player.play() } }Podría ser:
const foo = async (player) => { let foo = videojs; foo.addEventListener('ready', async () => { await player.play() } } await foo();o:
const foo = (player) => { let foo = videojs; foo.addEventListener('ready', async () => { await player.play() } } foo();Si desea que foo devuelva una promesa que se resuelva cuando se resuelva la promesa .play() -returned, entonces podría prometer addEventListener .
Algo como esto:
const whenEvent = (elem, event) => new Promise((resolve) => elem.addEventListener(event, resolve, { once: true }) ); const foo = async (player) => { await whenEvent(videojs, 'ready'); await player.play(); }; foo().then(() => console.log("foo resolved")); Tenga en cuenta que una promesa solo se puede resolver una vez, mientras que un detector de eventos se puede llamar varias veces. Entonces, esta versión prometida ( whenEvent ) solo capturará el primer evento y luego dejará de escuchar. whenEvent (y por lo tanto foo ) debe llamarse nuevamente para tratar con la próxima ocurrencia del evento.