Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cannot read property 'push' of null [NODEJS]

Sujet résolu
    2 janvier 2018 à 18:49:34

    Hello,

    Je travaille sur nodejs et je suis confronté à un problème...

    function openBox(name) {
      getBoxItems(name).then(function(result) {
        var items = result;
        var directory = null;
        console.log("amount:" + items[0].amount);
        console.log("id:" + items[0].id_item);
        console.log("amount1:" + items[1].amount);
        console.log("id1:" + items[1].id_item);
        if (items != null) {
          for (var i = 0; i < items.length; i++) {
            if (directory != null) {
              directory = new Array();
            }
            for (var j = 0; j < items[i].amount; j++) {
              directory.push(items[i].id_item);
            }
          }
        }
        console.log(directory);
        console.log("id" + directory[getRandom(0, directory.length)]);
        return directory[getRandom(0, directory.length)];
      });
    }

    getBoxItems() est une fonction qui fait une requête mysql à ma base de données. J'en ai fait une "promise" pour pouvoir travailler avec dans cette fonction.

    Ma console affiche le texte suivant quand j'exécute le code.


    amount:1
    id:1
    amount1:5
    id1:3
    (node:10608) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'push' of null

    Donc... Lorsque je souhaite ajouter à la fin de mon tableau "directory", ce que je vais ajouter est null ?! Pourtant mes consoles.log me disent le contraire.

    Je ne parviens pas à résoudre mon soucis...

    Bonne journée, merci pour vos futurs réponses

    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2018 à 18:57:25

      Bonjour,

      L'erreur ne te dis pas ca, il te dit qu'il peut pas lire la propriete push de null, ce qui veut dire que tu fais quelque chose du genre

      null.push(monItem), ton directory est donc null au moment d'utiliser push. Essaye de changer comme ca

       if (directory == null) {
                directory = new Array();
              }

      Autre chose, en Javascript il faut eviter d'utiliser new Array() (je crois que personne ne l'utilise honnetement), utilise plutot []

      Regarde le code suivant, il est plus rapide

      function openBox(name) {
        getBoxItems(name).then(function(result) {
          var items = result;
          var directory = []; // A la place de new Array() utilise []
          console.log("amount:" + items[0].amount);
          console.log("id:" + items[0].id_item);
          console.log("amount1:" + items[1].amount);
          console.log("id1:" + items[1].id_item);
          if (items != null) {
            for (var i = 0; i < items.length; i++) {
              for (var j = 0; j < items[i].amount; j++) {
                directory.push(items[i].id_item);
              }
            }
          }
          console.log(directory);
          console.log("id" + directory[getRandom(0, directory.length)]);
          return directory[getRandom(0, directory.length)];
        });
      }

      -
      Edité par Stelyus 2 janvier 2018 à 19:00:45

      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me mp, venez sur Discord (username: Stelyus#8984)
        2 janvier 2018 à 19:22:12

        Merci pour ta réponse

        J'avais utilisé []; avant je pensais que l'erreur était dû au fait que j'utilisais []; du coup j'avais mis Array :/

        Du coup, c'est ma condition qui test si il est null qui est fausse aïe aïe aïe...

        Merci énormément pour ta réponse

        -
        Edité par Shidoo 2 janvier 2018 à 19:23:15

        • Partager sur Facebook
        • Partager sur Twitter

        Cannot read property 'push' of null [NODEJS]

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown