Javascript 在NodeJS中循环后获取新数组值时遇到问题

Javascript 在NodeJS中循环后获取新数组值时遇到问题,javascript,node.js,npm,Javascript,Node.js,Npm,由于我是NodeJS新手,我尝试了几种方法,比如在函数上使用async/await,但是当我尝试打印数组retrievevalue时,它似乎总是空的 即使尝试等待也无济于事,如果我在它推入数组的点打印retrieveValues,它将在控制台中显示,但在之后执行时不会显示 router.post('/api/retrievefornotifications', (request, response) => { var requestBody = request.body;

由于我是NodeJS新手,我尝试了几种方法,比如在函数上使用async/await,但是当我尝试打印数组retrievevalue时,它似乎总是空的

即使尝试等待也无济于事,如果我在它推入数组的点打印retrieveValues,它将在控制台中显示,但在之后执行时不会显示

router.post('/api/retrievefornotifications', (request, response) => {
    var requestBody = request.body;
    var responseCode;
    var teacher = requestBody.teacher;
    var notification = requestBody.notification;

    var emails = helper.findEmailAddresses(notification);

    console.log(emails);

    var retrieveValues = {
        recipients: []
    };

    async function suspended(dataElement) {
        con.query('SELECT COUNT(*) as count_value FROM school.schoolinformation WHERE email = ? AND user_status = ?', [dataElement, 1], function (err, result, fields) {
        // con.query('SELECT COUNT(*) as count_value FROM school.schoolinformation WHERE email = ? AND user_status = ?; SELECT COUNT(*) as count_value2 FROM school.registration_relationship WHERE teacher_email = ? AND student_email = ?', [dataElement, 1, teacher, dataElement], function (err, result, fields) {
            // console.log("dataElements %s", dataElement);
            if (!err) {
                // console.log("Count value 1: %s",result[0][0].count_value);
                // console.log("Count value 2: %s",result[1][0].count_value2);
                // var suspended = result[0][0].count_value;
                // var registerWithTeacher = result[1][0].count_value;

                // console.log(result);
                var suspended = result[0].count_value;
                // Does such an email exist? (0 - NOT SUSPENDED, 1 - SUSPENDED) - suspended
                // If 1 means it is a registered pair - registerWithTeacher
                // has been mentioned in notification
                // Is registered with the teacher
                if (suspended == 0) {
                    console.log("pushing %s", dataElement);
                    retrieveValues.recipients.push(dataElement);
                }
                else {
                    responseCode = 500;
                    helper.writeResponse(responseCode, response, 0);
                }
            }
            else {
                responseCode = 204;
                helper.writeResponse(responseCode, response, 0);
            }
        });
    }

    console.log(retrieveValues);
    response.end();

})

最后一个
console.log
在按下之前运行。 您将函数作为回调传递,因此它将在操作结束后运行。 我稍微清理了一下您的代码并移动了
控制台.log

router.post('/api/retrievefornotifications', (request, response) => {
var requestBody = request.body;
var responseCode;
var teacher = requestBody.teacher;
var notification = requestBody.notification;

var emails = helper.findEmailAddresses(notification);

console.log(emails);

var retrieveValues = {
    recipients: []
};

    con.query('SELECT COUNT(*) as count_value FROM school.schoolinformation WHERE email = ? AND user_status = ?', [dataElement, 1], function (err, result, fields) {
        if (!err) {
            var suspended = result[0].count_value;
            if (suspended == 0) {
                console.log("pushing %s", dataElement);
                retrieveValues.recipients.push(dataElement);
            }
            else {
                responseCode = 500;
                helper.writeResponse(responseCode, response, 0);
            }
        }
        else {
            responseCode = 204;
            helper.writeResponse(responseCode, response, 0);
        }
        console.log(retrieveValues);
        response.end();
    });

})最后一个
控制台.log
在按下之前运行。 您将函数作为回调传递,因此它将在操作结束后运行。 我稍微清理了一下您的代码并移动了
控制台.log

router.post('/api/retrievefornotifications', (request, response) => {
var requestBody = request.body;
var responseCode;
var teacher = requestBody.teacher;
var notification = requestBody.notification;

var emails = helper.findEmailAddresses(notification);

console.log(emails);

var retrieveValues = {
    recipients: []
};

    con.query('SELECT COUNT(*) as count_value FROM school.schoolinformation WHERE email = ? AND user_status = ?', [dataElement, 1], function (err, result, fields) {
        if (!err) {
            var suspended = result[0].count_value;
            if (suspended == 0) {
                console.log("pushing %s", dataElement);
                retrieveValues.recipients.push(dataElement);
            }
            else {
                responseCode = 500;
                helper.writeResponse(responseCode, response, 0);
            }
        }
        else {
            responseCode = 204;
            helper.writeResponse(responseCode, response, 0);
        }
        console.log(retrieveValues);
        response.end();
    });

})

也许您可以尝试以下代码:

router.post('/api/retrievefornotifications',(请求、响应)=>{
var requestBody=request.body;
var响应码;
var-teacher=requestBody.teacher;
var notification=requestBody.notification;
var emails=helper.findemailaddress(通知);
控制台日志(电子邮件);
var retrieveValues={
收件人:[]
};
const result=new Promise((解析,拒绝)=>{con.query('SELECT COUNT(*)作为school.schoolinformation中的COUNT_值,其中email=?和user_status=?',[dataElement,1],函数(err,result,fields){
//con.query('选择COUNT(*)作为school.school信息中的COUNT_值,其中email=?和user_status=?;选择COUNT(*)作为school.registration关系中的COUNT_值2,其中teacher_email=?和student_email=?,[dataElement,1,teacher,dataElement],函数(err,result,fields){
//日志(“数据元素%s”,数据元素);
如果(!err){
//console.log(“计数值1:%s”,结果[0][0]。计数值);
//console.log(“计数值2:%s”,结果[1][0]。计数值2);
//var suspended=结果[0][0]。计数值;
//var registerWithTeacher=结果[1][0]。计数值;
//控制台日志(结果);
var suspended=结果[0]。计数值;
//是否存在此类电子邮件?(0-未暂停,1-暂停)-暂停
//如果1表示它是一个已注册的对-registerWithTeacher
//已在通知中提及
//他在老师那儿登记了
如果(暂停==0){
console.log(“推送%s”,数据元素);
解析(数据元);
}
否则{
响应代码=500;
writeResponse(responseCode,response,0);
}
}
否则{
响应代码=204;
writeResponse(responseCode,response,0);
}
});
//在这里做些事情
控制台日志(等待结果);
retrieveValues.recipients.push(等待结果);
console.log(retrieveValues);
response.end();
});
});

我希望它能帮助您。

也许您可以尝试以下代码:

router.post('/api/retrievefornotifications',(请求、响应)=>{
var requestBody=request.body;
var响应码;
var-teacher=requestBody.teacher;
var notification=requestBody.notification;
var emails=helper.findemailaddress(通知);
控制台日志(电子邮件);
var retrieveValues={
收件人:[]
};
const result=new Promise((解析,拒绝)=>{con.query('SELECT COUNT(*)作为school.schoolinformation中的COUNT_值,其中email=?和user_status=?',[dataElement,1],函数(err,result,fields){
//con.query('选择COUNT(*)作为school.school信息中的COUNT_值,其中email=?和user_status=?;选择COUNT(*)作为school.registration关系中的COUNT_值2,其中teacher_email=?和student_email=?,[dataElement,1,teacher,dataElement],函数(err,result,fields){
//日志(“数据元素%s”,数据元素);
如果(!err){
//console.log(“计数值1:%s”,结果[0][0]。计数值);
//console.log(“计数值2:%s”,结果[1][0]。计数值2);
//var suspended=结果[0][0]。计数值;
//var registerWithTeacher=结果[1][0]。计数值;
//控制台日志(结果);
var suspended=结果[0]。计数值;
//是否存在此类电子邮件?(0-未暂停,1-暂停)-暂停
//如果1表示它是一个已注册的对-registerWithTeacher
//已在通知中提及
//他在老师那儿登记了
如果(暂停==0){
console.log(“推送%s”,数据元素);
解析(数据元);
}
否则{
响应代码=500;
writeResponse(responseCode,response,0);
}
}
否则{
响应代码=204;
writeResponse(responseCode,response,0);
}
});
//在这里做些事情
控制台日志(等待结果);
retrieveValues.recipients.push(等待结果);
console.log(retrieveValues);
response.end();
});
});

我希望它能帮助你。

这能回答你的问题吗?这能回答你的问题吗?我真正想做的是用挂起的函数多次查询,并将其添加到retrieveValues数组列表中。你使用什么库进行sql连接?你只能等待
Promise
s。我使用的是MySQL这个模块没有支持承诺。您可以使用其他支持它的,但我相信您可以在没有async/aw的情况下做您想做的事情