router.post('/filedown',function(req, res, next) {
    var abcrr = JSON.parse(req.body['name']);
    var zongxrr = [];
    for(var i=0; i<abcrr.length;i++){
      var xrr = abcrr[i].join(",");
      var userSql = 'select * from imagetomp3 where id=? and crr=?';   
     var param = ["abc",xrr];
     selectdatabase(xrr,zongxrr,userSql,param);
        }
async function selectdatabase(xrr,zongxrr,userSql,param){
 var rows = await myquery(userSql, param);
    for(var i=0; i<rows.length; i++){
       var arr = [];
       arr[0] = xrr;
       arr[1] = rows[i].originalname;
       arr[2] = rows[i].filename;
       arr[3] = rows[i].originalname.substring(rows[i].originalname.length-4);
       arr[4] = rows[i].originalname.substring(rows[i].originalname.indexOf('_')+1,rows[i].originalname.lastIndexOf("_"));
       zongxrr.push(arr);
        }
      }
});
abcrr是前台传过来的数组,跟据数组的每个元素查找数据库,每个元素都会查到好几个数据库的row,把这些row通通push进 zongxrr.再传回前台,只是现在遇到异步问题,请问如何解决?

解决方案 »

  1.   

    我看你会用await的嘛,你直接调用selectdatabase时候加上不就行了了,然后闭包前面加上async
      

  2.   

    你这个写的有点乱,不太清楚你到底想用哪些数据,你既然最终是要返回zongxrr,你开始已经有一个闭包作用域变量了,那就不要把他当做参数传进selectdatabase里边。试试下面这个:router.post('/filedown', async function(req, res, next) {
    var abcrr = JSON.parse(req.body['name']);
    var zongxrr = [];
        for(var i=0; i<abcrr.length;i++){
    var xrr = abcrr[i].join(",");
    var userSql = 'select * from imagetomp3 where id=? and crr=?';   
    var param = ["abc", xrr];
    await selectdatabase(xrr, userSql, param);
    }

    async function selectdatabase(xrr, userSql, param) {
    var rows = await myquery(userSql, param);
    for(var i=0; i<rows.length; i++){
           var arr = [];
           arr[0] = xrr;
           arr[1] = rows[i].originalname;
           arr[2] = rows[i].filename;
           arr[3] = rows[i].originalname.substring(rows[i].originalname.length-4);
           arr[4] = rows[i].originalname.substring(rows[i].originalname.indexOf('_')+1,rows[i].originalname.lastIndexOf("_"));
           zongxrr.push(arr);
        }
        }
    });