次のコードでは、songlist
という変数をコールバック関数complete
で使用できるようにするにはどうすればよいですか?javacriptのコールバック関数で変数を使用する方法
コードをそのまま実行すると、sqliteはsonglist
を正常に埋め込みますが、コールバックを実行すると変数はnull
になります。
基本的に、私はconsole.log(songlist)が動作する前にsqliteが実行を完了するための方法を見つけようとしています。私はコールバックを使用してそれを行うと思ったが、この変数を渡す問題に実行します。ありがとう。怒鳴る示すようsonglistが完了するまでに渡し匿名関数を作成することにより
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('mydb.db');
var songlist = []
var complete = function (songlist) {
console.log(songlist);
}
db.serialize(function() {
db.each("SELECT rowid AS id, info FROM lorem where info like '%" + song + "%'", function (err, row) {
songlist.push(row.info);
console.log("each")
}, complete)
})
ありがとうございます。グローバル変数を使用するほうが簡単ですが、ソリューションも機能します。 –
絶対に言えば、グローバルスコープであり、必要はなく、最初の解決策は簡単です。ただし、匿名関数のテクニックは、グローバル変数を使用しないすべての状況で機能します。将来的には、アプリケーションが大きくなり、すべてがモジュール化される場合があります。 –