Défaut d'inscription de Paho

Problème

AMQJS0005E Erreur interne. Message d'erreur : Impossible de lire la propriété 'show' d'undefined.

Cette erreur s'affiche de manière sporadique, notamment lorsque vous effectuez un Shift-Reload de la page entière.

Solution

J'ai un plugin Vue.js pour afficher des messages "toast" (Vue.toasted). Je l'utilise actuellement à des fins de débogage.

Tout fonctionnait bien au départ, puisque mon code était exécuté après l'initialisation de Vue et le chargement de toute la page.

Voulant accélérer l'abonnement MQTT, j'ai mis du code pour lancer l'abonnement plus tôt.

C'est là que j'ai rencontré cette erreur. Tel qu'il est écrit, il semble qu'il s'agisse d'une condition de course, car il n'y a pas de cohérence.

il s'avère que mes messages grillés, que j'ai mis pour le débogage, étaient la cause du problème.

function info(msg){
     console.log(msg) ;
     /*if (typeof Vue !== 'undefined') {
         Vue.toasted.show(msg, {
             action : {
                 texte : 'OK',
                 onClick : (e, toastObject) => {
                     toastObject.goAway(0) ;
                 }
             }
         });
     } else {
         console.log("... Vue pas encore disponible ...") ;
     }*/   
}

Comme vous le voyez, la suppression de Vue.toasted.show a permis au code de fonctionner correctement.

Par conséquent, si l'OPS envoie des messages d'erreur, cela peut être lié à un autre code que vous avez inséré, et pas nécessairement à l'état interne de l'OPS.

Code de travail :

function info(msg){
     console.log(msg) ;
     if (typeof Vue !== 'undefined' && typeof Vue.toasted !== 'undefined') {
         Vue.toasted.show(msg, {
             action : {
                 texte : 'OK',
                 onClick : (e, toastObject) => {
                     toastObject.goAway(0) ;
                 }
             }
         });
     } else {
         console.log("... Vue pas encore disponible ...") ;
     }
}

Ce code fonctionne, car il vérifie également si Vue.toasted a été initialisé.