Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
¿Existe un equivalente de la función `resolver` de Javascript (del constructor Promise) en Dart?

Quiero crear una función que devuelva un futuro. Un valor se resolverá en un momento específico. Sin embargo, el valor deberá resolverse desde dentro de una devolución de llamada. En Javascript, podría hacer algo como esto:

 function delay(seconds) { return new Promise((resolve, reject) => { setTimeout(resolve, seconds * 1000); }); }

No veo ninguna solución clara para esto en Dart, ¿alguien podría mostrarme una forma de hacerlo (o una forma de evitarlo)? Si necesita alguna aclaración, no dude en hacer un comentario.

Editar: para ser más claro, proporcionaré el contexto y el código fuente que he creado.

Estoy tratando de hacer una función (método, en realidad) que regrese después de que le ocurra un solo evento a un elemento. Primero lo escribí en Javascript -

 HTMLElement.prototype.on = function(eventName) { return new Promise(function(resolve, reject) { var handler = function(event) { resolve(null); this.removeEventListener(eventName, handler); }; this.addEventListener(eventName, handler); }); };

y puedes usarlo así: await myButton.on("click"); alert("Button clicked first time"); .

Estoy tratando de recrearlo en Dart + HTML por jugar, y aquí está el código hasta ahora.

 import "dart:html"; extension on HtmlElement { on(String name) { void handler(Event event) { removeEventListener(name, handler); // Do something to actually return from the method... } addEventListener(name, handler); } } void main() {}

Edit: para los curiosos, el código completo se puede encontrar aquí o aquí .

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No estoy familiarizado con JavaScript Promise s, pero suponiendo que desea await myButton.on("click") se complete solo después de que la función del handler se haya ejecutado al menos una vez, puede usar un Completer :

 import "dart:async"; import "dart:html"; extension on HtmlElement { Future<void> on(String name) { final completer = Completer<void>(); void handler(Event event) { removeEventListener(name, handler); completer.complete(); } addEventListener(name, handler); return completer.future; } }
about 4 years ago · Juan Pablo Isaza Relatório

0

Una promesa se puede resolver una vez como máximo, por lo que probablemente tenga sentido eliminar automáticamente el detector de eventos después del primer clic. Y en lugar de modificar el HtmlElement.prototype que es una práctica antihigiénica, escriba una función de clic simple que acepte un onclick como entrada:

 function onclick(elem) { return new Promise(r => elem.addEventListener("click", r, {once: true}) ) } function main () { onclick(document.forms.myapp.mybutton) .then(event => console.log(event.target)) onclick(document.forms.myapp.otherbutton) .then(event => console.log(event.target)) } main()
 <form id="myapp"> <button type="button" name="mybutton">A</button> <button type="button" name="otherbutton">B</button> </form>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda