1
node/js/typescriptのasync-first性質に合わせて調整できません。この小さな関数の目的は、はっきりしているはずです。データベースを取り、そのデータベースにリストされているコースの配列を返します。ノードsqlite3コードを同期して実行しています
問題は、データベース操作が実行される前にreturnステートメントが実行され、空のリストが取得されることです。データベースeach
のループ内にブレークポイントを設定すると、行が見つかっており、コースがret
に1つずつ入れられていることがわかりますが、これらのコースはcourseList()
というスコープでは表示されません。
const courseList = (database: sqlite3.Database): Course[] => {
let ret = new Array<Course>();
database.serialize();
database.each("select ID, Title from Course", (err: Error, row: Object) => {
ret.push(new Course(
row.ID,
row.Title
))
})
return ret;
}
提案ですか?
呼び出しコードは、コースに関する情報を印刷するだけです。たとえば、
let courses = courseList(db);
console.log(courses.length); // logs 0, even though the db contains courses
NodeJSの特別な機能はありません。上位機能、特にコールバックです。あなたは呼び出しコードを表示できますか? –
これを確認してください:http://stackoverflow.com/questions/39106668/node-js-sqlite3-read-all-records-in-table-and-return – orhankutlu
@AluanHaddadコーリングコードの例をいくつか追加しました。 – NiloCK