我想將 SQLite 資料庫中的資訊存盤在陣列中。當我如下撰寫時,輸出未定義。
let hostnames = [];
let usernames = [];
let passwords = [];
let commands = [];
let status = [];
let ids = [];
let mac = [];
//read from sqlite
var sqlite3=require('sqlite3').verbose();
var db=new sqlite3.Database('../database/database.sqlite',(err)=>{
if(err){
return console.error(err.message);
}
console.log('Connected...');
});
db.all('SELECT * FROM Users ORDER BY id',[],(err,rows)=>{
if(err){
return console.error(err.message);
}
rows.forEach((row)=>{
hostnames.push(row.name);
usernames.push(row.username);
passwords.push(row.password);
commands.push(row.command);
status.push(row.status);
mac.push(row.mac);
ids.push(row.id);
});
});
console.log("hostnames",hostnames);
當我想從 forEach 外部訪問主機名時;console.log("hostnames",hostnames);
控制臺輸出是undefined。我不知道我應該怎么做。如果你能幫忙我會很高興
uj5u.com熱心網友回復:
它不起作用,因為這是異步代碼。它必須有回呼,以便在資料庫查詢完成后回應。
檔案:https ://nodejs.org/en/knowledge/getting-started/control-flow/what-are-callbacks/
例子
在此示例中,我將回呼傳遞給函式 DataExt 并在完成后呼叫它。
let hostnames = [];
var sqlite3=require('sqlite3').verbose();
function DataExt(db, callback) {
db.all('SELECT * FROM Users ORDER BY id',[],(err,rows)=>{
if(err){
return console.error(err.message);
}
else
{
rows.forEach((row)=>{
hostnames.push(row.name);
});
return callback(false, hostnames);
}
});
}
var db=new sqlite3.Database('../database/database.sqlite',(err)=>{
if(err){
return console.error(err.message);
}
console.log('Connected...');
});
DataExt(dtb, function(err, content) {
if(err) throw(err);
ExtractedHostnames = content;
console.log("hostnames", ExtractedHostnames);
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490818.html
