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
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);
Les messages

Nom : capture d'écran_2.png
Affichages : 124
Taille : 106,6 Ko