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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 HTML : Sélectionner tout - Visualiser dans une fenêtre à part
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
Les messages
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
![]()
Partager