前提・実現したいこと
javascriptでsqlite3を触ってみているんですが、分からない所があるのでご質問させていただきます。(何分学習し始めて日が浅いので、根本的な所ならすみません)
sqlite3操作中に、別のfunctionの変数を読み込みたいのですが、うまくいかず困っています。
以下のソースコードで最終行のnew ReadAllRows()
をした時に、this.arrを読み込みたいです。
発生している問題・エラーメッセージ
TypeError: Cannot read property 'push' of undefined
該当のソースコード
javascript
1'use strict' 2 3function Constract () { 4 this.argv = require('minimist')(process.argv.slice(2)) 5 this.sqlite3 = require('sqlite3').verbose() 6 this.db = new this.sqlite3.Database('memo_db.sqlite3') 7 this.arr = [] 8} 9 10function RunMemo() { 11 if (this.argv.l || this.argv.r || this.argv.d) { 12 console.log('RunMemo OK') 13 } 14} 15 16function ReadAllRows() { 17 if (this.argv.r || this.argv.d) { 18 this.db.all('SELECT rowid, ? FROM memos', [`body`], function(err, rows) { 19 20 if (err) { console.log(err) } 21 for (const row of rows) { 22 this.arr.push(row.body) 23 } 24 }) 25 } 26} 27 28RunMemo.prototype = new Constract() 29new RunMemo() 30 31ReadAllRows.prototype = Object.create(RunMemo.prototype) 32new ReadAllRows()
試したこと
thisが読み込めていないからだと考え、this.db.all(...).bind(this)
などしてみましたが、TypeError: this.db.all(...).bind is not a function
とエラーが出ます。
function ReadAllRows()
の直下にconst arr = []
と書くと、arr.push(row.body)
が成功します。
補足情報(FW/ツールのバージョンなど)
nodejs : v12.16.1
sqlite3 : 4.2.0
macOS : 10.13.6
数日悩んでいますがどうしても分からず、、今回こちらに投稿してみました。
どうかよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 06:50