Javascript 无法在res.json中获取响应

Javascript 无法在res.json中获取响应,javascript,node.js,express,Javascript,Node.js,Express,我试图在sql模块内部调用sql模块,并将第二级模块推入第一级模块数组,以便获得结果。 但是我在输出中得到空数组 router.post('/mymsg', function(req, res, next) { var rootmsgid = req.body.rootmsgid; var request = new sql.Request() .input('rootmsgid', sql.Int, rootmsgid) .execut

我试图在sql模块内部调用sql模块,并将第二级模块推入第一级模块数组,以便获得结果。 但是我在输出中得到空数组

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();
        });
    });
router.post('/mymsg',函数(req,res,next){
var rootmsgid=req.body.rootmsgid;
var request=newsql.request()
.input('rootmsgid',sql.Int,rootmsgid)
.execute('sp_mymsg'))
.then(功能(val){
var x=val.recordset[0]
var z=[];
变量y=[];
对于(变量i=0;i
我试图在sql模块内部调用sql模块,并将第二级模块推入第一级模块数组,以便获得结果。
但是我在输出中得到空数组

欢迎使用异步编程:)

在for循环完成之前执行
res.json(z)
。 也就是说,您将获得一个空数组。
使用async模块或使用async/await解决问题。

或者他们可以继续
承诺链
并添加另一个
。然后
而不使用
async/await
包装器