Javascript 保存节点的sqlite3包的结果

Javascript 保存节点的sqlite3包的结果,javascript,node.js,sqlite,Javascript,Node.js,Sqlite,我正试图从db.get(…)=>{…}将数据保存在数组中,但每次我得到空数组时,我都不明白它是与作用域或方法有关的db.get(…)=>{…}?请帮我修一下。我的主要目标 const sqlite3=require('sqlite3'); 让db=new sqlite3.Database('./ProblemsForPatan.db',sqlite3.OPEN\u READONLY); 让sql='SELECT*FROM Problems'; db.all(sql,[],(err,rows)=

我正试图从
db.get(…)=>{…}
将数据保存在数组中,但每次我得到空数组时,我都不明白它是与作用域或方法有关的
db.get(…)=>{…}
?请帮我修一下。我的主要目标

const sqlite3=require('sqlite3');
让db=new sqlite3.Database('./ProblemsForPatan.db',sqlite3.OPEN\u READONLY);
让sql='SELECT*FROM Problems';
db.all(sql,[],(err,rows)=>{
rows.forEach((rowQuestion)=>{
让arrayWithQuestionsId=question.split(rowQuestion.problem_questions_id,,)
var arrayOfAnswers=[]
arrayWithQuestionsId.forEach((id)=>{
让sql=`从问题和答案中选择*,其中问题id=`
db.get(sql,[id],(err,rowAnswer)=>{
console.log(rowAnswer)//对象
arrayOfAnswers.推送(rowAnswer)
})//db.get(…)
console.log(arrayOfAnswers)//[]
})//arrayWithQuestionsId.forEach(…)
rowQuestion.answer=arrayOfAsnwers;
})//rows.forEach(…)
console.log(行)/[带有“answer”的对象:[]]
})//db.all(…)
您调用
db.get()
获取答案是异步的,这意味着您的
控制台.log(行)
在填充答案之前执行。当“行”完成处理后,您将需要使用回调

db.all(sql,[],(err,rows)=>{
//在此处使用第二个参数“index”跟踪索引
rows.forEach((行,索引)=>{
//在问题上循环\u问题\u id
_.split(row.problem\u questions\u id,,).forEach((id)=>{
让sql=`SELECT*FROM questions and answersof problems,其中question_id=?`;
//使用db.all而不是db.get获取答案数组
//此调用是异步的,因此我们需要检查是否在回调中完成
db.all(sql,[id],(err,answers)=>{
//“answers”在这里是一个数组
row.answer=答案;
//如果索引比长度小一,则为最后一个索引
如果(索引===行。长度-1){
//我们完了!
完成(行);
}
});
});
});
});
//当获取所有答案时,将异步调用此函数
功能完成(行){
console.log(行);
}