Tengo esta función a la que quiero llamar seguida de la apertura de una página en una nueva pestaña después de que un usuario haga clic en un elemento en mi aplicación VueJS similar a esto:
const someFunction = async () => { const value = await api.someCallToApi(); window.open('https://example.com', '_blank').focus(); }No tengo permitido hacer esto, probablemente debido a que la espera resultó en que window.open no sea un resultado directo de una acción del usuario (?). Debido a la forma en que mi aplicación está configurada, el orden de la llamada a la API y la apertura de la ventana en la nueva pestaña son relevantes.
¿Cuál sería una forma sólida y moderna de abordar tal problema?
En un mundo ideal, todas las funciones asíncronas ya devolverían promesas. Pero es posible que aún haya bibliotecas antiguas que usen await . Puede crear una Promesa que envuelva la función de await de la siguiente manera:
const delay = (ms) => new Promise(resolve => setTimeout(resolve.bind(null, ms/1000), ms)); delay(3*1000).then((sec) => alert(sec + " seconds passed"));