1 pièce(s) jointe(s)
Timeout, clear et call back pour un NOEUD NODE-RED
Hey !
Alors je suis désolé d'avance , je ne suis pas la plus doué pour expliquer ^^.
Pour commencer je suis une novice en dev , je suis en réorientation professionnel et actuellement je boss sur node-red pour le développement d'un nœud en JAVASCRIPT.( pour ma boite ou je suis en alternance )
En gros c'est un nœud timeout qui envoi un message d'erreur quand le message d'entrée n'arrive pas jusqu’à lui. Je vous mettrais des screens ;)
En gros: Un message d'entre n'arrive pas jusqu'au nœud timeout = donc message d'erreur 1 s’envoie ( admettons paramétré toute les 5 secondes. Mais le problème c'est que quand j'ai un deuxième message qui n'arrive pas jusqu'au nœud timeout et que mon message d'erreur 2 part., Ça n'a pas clear le premier. Je me retrouve donc avec toujours des doublons des messages d'erreurs, parfois le même message d'erreur arrive 2 fois T_T. Je penses qu'il doit y avoir un problème au niveau du clear ou de la callback . ( J’essaye de trouver une solution pour vous afficher mon code de manière lisible ..... )
Auriez-vous une solution ou une piste ? J'ai beau jouer avec mon code je ne trouves pas T_T
Merci d'avance à tous !!!
Chichi
mon front.js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| /* global RED */
RED.nodes.registerType('timeout', {
// node definition
category: 'industrial connector',
defaults: {
forward_msg: {
value: true
},
repeat_topic_error: {
value: true
},
name: {
value: ''
},
timeout: {
value: 5000,
validate: function (v) {
return ((v === '')
|| (RED.validators.number(v) && (v >= 0) && (v <= 2700000))); // 27000000: 45 min
}
},
},
inputs: 1,
outputs: 1,
label: function () {
return this.name || 'timeout';
},
}
}); |
mon .html
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <script type="text/x-red" data-template-name="timeout">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="timeout.label.name"/></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]timeout.placeholder.name" placeholder="Enter a node name">
</div>
<div class="form-row">
<label for="node-input-topic"><i class="icon-list"></i> <span data-i18n="timeout.label.topic"/></label>
<input type="text" id="node-input-topic" placeholder="For example: 'Message timeout occured' ">
</div>
<div class="form-row ">
<label for="node-input-timeout"><i class="fa fa-repeat"></i> <span data-i18n="timeout.time.time"></span></label>
<input id="node-input-timeout" placeholder="0" type="number" min="0" max="270000000000" style="width: 100px" >
<select id="timeout-time-type-select" class='select' style="width: 150px">
<option value="s" data-i18n="timeout.time.seconds"></option>
<option value="m" data-i18n="timeout.time.minutes"></option>
</select>
</div>
</script>
<script type="text/x-red" data-help-name="timeout"> |
mon .js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| module.exports = function (RED) {
function Node(config) {
RED.nodes.createNode(this, config);
var node = this;
let timeoutID;
const timeout = config.timeout;
function LaunchError() {
const msg = {
payload: '',
topic: 'Message timeout occured',
timeout: timeout };
node.send(msg);
if (config.repeat_topic_error) {
timeoutID = setTimeout(LaunchError, timeout); // Si case coché envoi message erreur topic
}
}
timeoutID = setTimeout(LaunchError, timeout);
node.on('input', function (msg) {
node.send(msg);
clearTimeout(timeoutID);
timeoutID = setTimeout(LaunchError, timeout);
});
}
RED.nodes.registerType('timeout', Node); |
Les messages
Pièce jointe 515201