我有一个名为looper2()的函数,它接受一个数据数组,我试图从mysql数据库中获取每个数据的id,一切正常,但是我的nodejs没有等待这个函数,它仍然表示await。

var noloop = [];
noloop = await looper2(json_array1);
console.log("db id returns",noloop)

console.log("no loop",noloop[0]); //im getting this undefined

function looper2(){
    return new Promise(function(resolve, reject) {
        // Do async job
        for(var i=0;i<json_array1.length;i++){
            var sl =  "select id from json where name ="+db.escape(json_array1[i]);
            db.query(sl, function(err,result) {
                if (err) throw err;
                console.log("individual id:", result)
                noloop.push(result)
            });
           }
           resolve(noloop)
    });

}

最佳答案

问题是,在looper2函数中,在forloop之后立即解决问题,不要等待db查询完成。您应该在数据库查询全部完成后进行解析

function looper2(){
       return new Promise(function(resolve, reject) {
        // Do async job
        for(var i=0;i<json_array1.length;i++){
            var sl =  "select id from json where name ="+db.escape(json_array1[i]);
            db.query(sl, function(err,result) {
                if (err) throw err;
                console.log("individual id:", result)
                noloop.push(result)
                if(noloop.length == json_array1.length) {
                     resolve(noloop)
                }
            });
        }
    });
}

09-25 18:26