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

161
Visualizações
Ejecute la acción solo cuando el texto seleccionado sea estable

Me gustaría configurar un temporizador para la función de action . La regla es: cuando el texto seleccionado no cambia durante 3 segundos, ejecutamos la función action con el texto seleccionado .

Probé el siguiente código en el área de juegos https://microsoft.github.io/monaco-editor/playground.html , no funcionó. Cuando cambié el texto seleccionado muy rápidamente, sus acciones no se cancelaron.

¿Alguien podría ayudar?

 const editor = monaco.editor.create(document.getElementById('container'), { value: '1+2+3+4+5+6+7', language: 'javascript' }); function action(x) { console.log("action", x) } let myTimeout editor.onDidChangeCursorSelection((e) => { clearTimeout(myTimeout) console.log("cleared", myTimeout) let selectedText = editor.getModel().getValueInRange(editor.getSelection()) if (selectedText != "") { // if we are already in this event, the selected text must change myTimeout = setTimeout(action(selectedText), 3000); console.log("set", myTimeout, selectedText) } })

Edición 1: mi componente es un componente de clase, por lo que no puedo usar llamadas de enlace.

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

0

Puede usar el debounce lodash lograr el efecto que desea. Y use useCallback para asegurarse de obtener la misma instancia de función. Creo que una implementación como esta podría funcionar:

 import _ from 'lodash'; ... const debouncedAction = _.debounce(action, 3000).bind(this); editor.onDidChangeCursorSelection((e) => { let selectedText = editor.getModel().getValueInRange(editor.getSelection()) if (selectedText != "") { // if we are already in this event, the selected text must change debouncedAction(selectedText); } })

Usé esto como referencia.

about 4 years ago · Juan Pablo Isaza Relatório

0

setTimeout toma la función como entrada, mientras la haya llamado. Creo que el siguiente código funciona bien.

 const editor = monaco.editor.create(document.getElementById('container'), { value: '1+2+3+4+5+6+7', language: 'javascript' }); function action(x) { console.log("action", x) } let myTimeout editor.onDidChangeCursorSelection((e) => { clearTimeout(myTimeout) let selectedText = editor.getModel().getValueInRange(editor.getSelection()) if (selectedText != "") { // "action" is called inside a function myTimeout = setTimeout(() => action(selectedText), 3000); } })
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