2 votes

impossible d'obtenir la réponse dans le res.json

J'essaie d'appeler le module sql à l'intérieur du module sql et de pousser le module de second niveau dans le tableau du module de premier niveau afin que je puisse obtenir le résultat. Mais j'obtiens un tableau nul dans la sortie.

router.post('/mymsg', function(req, res, next) {
      var rootmsgid = req.body.rootmsgid;
      var request = new sql.Request()
        .input('rootmsgid', sql.Int, rootmsgid)

        .execute('sp_mymsg')
        .then(function(val) {
          var x = val.recordsets[0]
          var z = [];
          var y  = [];
          for (var i = 0; i < x.length; i++) {

            var t1 = parseInt(x[i].msg_id)
            var t2 = parseInt(x[i].sender_id)
            var t3 = x[i].timestamp
            var t4 = x[i].recipient
            var t5 = x[i].subject
            var t6 = x[i].body

         var request = new sql.Request()
        .input('msgid', sql.Int, t1)

        .execute('filenamex')
        .then(function( val) {
         y =  val.recordsets[0];
         z.push({
                  "msg_id": t1,
                  "sender_id": t2,
                  "timestamp": t3,
                  "recipient": t4,
                  "subject": t5,
                  "body": t6,

                  "filename": y
                })

    console.log(z)

        })

     }
      res.json(z)

        })
        .catch(function(err) {
          console.log(err);
          res.json({
            msg: "Invalid Input",
            success: false
          });
          res.end();
        });
    });

J'essaie d'appeler le module sql à l'intérieur du module sql et de pousser le module de second niveau dans le tableau du module de premier niveau afin que je puisse obtenir le résultat. Mais j'obtiens un tableau nul dans la sortie.

0voto

mehta-rohan Points 891

Bienvenue dans la programmation asynchrone :)

Votre res.json(z) est exécuté avant la fin de votre boucle for. C'est pourquoi vous obtenez un tableau vide. Utilisez le module async ou utilisez async/await pour résoudre le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X