Сначала я предоставлю код, который представляет собой AWS node.js Лямбда-функцию
const mysql = require('mysql');
const con = mysql.createConnection({
host: 'testtest.ap-southeast-2.rds.amazonaws.com',
user: 'test',
password: 'test',
database: 'test',
});
exports.handler = function(event,context,callback){
context.callbackWaitsForEmptyEventLoop = false;
var queryResult=[];
var searchbyArray = (event.searchby);
var len = searchbyArray.length;
getResult(len,searchbyArray,function(err,data){
if(err){console.log("the error is "+err);}
else{
callback(null,data);
}
});
};
function getResult(len,searchbyArray,cb){
var results=[];
for(var i=0; i<len; i++){
console.log("before loop"+i);
var sql ="SELECT * FROM aa_customer_device WHERE id LIKE '%"+searchbyArray[i]+"%'";
con.query(sql,function(err,result){
if (err){cb(err,null);}
else{
results.push(result);
}
});
}
cb(null,results);
}
Здесь cb (null, results) выполняется до того, как цикл for завершится после завершения con. query (...) является асин c функцией (угадайте, что она так называется) и всегда возвращает пустой массив в «results», который затем возвращается обработчиком в его функции обратного вызова.
Есть ли В любом случае я могу написать код в node.js, чтобы он соответствовал последовательности, подобной
- fini sh, выполняя все con.query (...) внутри для l oop
- pu sh результирующий массив от каждой итерации l oop до массива 'результатов'
- только после того, как два вышеупомянутых шага были выполнены, вызвать cb (null, results)
здесь происходит то, что cb (null, results) выполняется задолго до того, как для l oop появится возможность сохранить нужную информацию в массиве результатов.
там любой способ выполнить sh то, что я хочу, используя node.js. Мне предложили использовать обещания, asyn c, подождите, но из того, что я прочитал, все эти решения точно не решат мою проблему.