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

366
Visualizações
¿Cómo personalizar el nodo Split en Node-Red de manera que no envíe todos los mensajes a la vez?

Estoy tratando de personalizar el nodo Split en Node-Red de manera que envíe el siguiente mensaje solo cuando el primero llegue al nodo Join; ya que estoy haciendo un procesamiento intermedio y me gustaría procesar cada mensaje por separado antes de unirme a ellos.

Entonces, he clonado el nodo Split del proyecto Node-Red, y en la parte donde ocurre la división de una matriz; Registro oyentes de eventos (ID aleatorios generados por el nodo Split original).

 else if (Array.isArray(msg.payload)) { // then split array into messages msg.parts.type = 'array'; var count = msg.payload.length / node.arraySplt; if (Math.floor(count) !== count) { count = Math.ceil(count); } msg.parts.count = count; var pos = 0; var data = msg.payload; msg.parts.len = node.arraySplt; for (let i = 0; i < count; i++) { msg.payload = data.slice(pos, pos + node.arraySplt); if (node.arraySplt === 1) { msg.payload = msg.payload[0]; } msg.parts.index = i; pos += node.arraySplt; if (i === 0) { send(RED.util.cloneMessage(msg)); continue; } let eventName = msg.parts.id + '-' + i; addHandler(eventName, send, msg); } done(); }

Mi función de controlador

 function addHandler(eventName, send, msg) { RED.events.addListener(eventName, () => { send(RED.util.cloneMessage(msg)); }); }

Y en el nodo Join (que está en el mismo archivo js)

 // commented below is the original code of the join function // if ((tcnt > 0 && group.currentCount > tcnt) || msg.hasOwnProperty('complete')) { // completeSend(partId); // return; // } else if (msg.parts.index <= (msg.parts.count - 2)) { let eventName = msg.parts.id + '-' + (parseInt(msg.parts.index) + 1); RED.events.emit(eventName); } else if (msg.parts.index >= (msg.parts.count - 1)) { completeSend(partId); return; }

Sin embargo, esto enviaría el primer mensaje (como lo envío directamente, y no a través de un evento), y solo el último mensaje; saltaría lo que sea en el medio.

La pantalla de depuración de Node-Red muestra indefinido para el segundo y tercer mensaje

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

0

Modificar el nodo dividido es la forma incorrecta de hacerlo.

Hay nodos de limitación de velocidad que harán esto por usted. por ejemplo , https://flows.nodered.org/node/node-red-contrib-semaphore

O puede usar el nodo de retraso con su función de liberación

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