gpt4 book ai didi

javascript - 如何使变量可用于 JavaScript 中的回调函数

转载 作者:行者123 更新时间:2023-12-03 03:22:33 26 4
gpt4 key购买 nike

在下面的代码中,如何使变量 songlist 可用于回调函数 complete

如果我按原样运行代码,sqlite 会成功填充 songlist,但是当运行回调时,变量将变为 null

基本上,我试图找出一种方法来确保 sqlite 在 console.log(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)

})

最佳答案

在您当前的代码中,songlist 是全局的,这意味着它已经可供您的回调使用。当您将 songlist 参数添加到回调时,您将隐藏它,这使得全局不再可见。

你可以简单地说:

var complete = function () {
console.log(songlist);
}

并记录全局对象。

但这并不是很令人满意,因为在不是绝对需要的情况下通常应该避免使用全局变量。

更好的主意是在函数中定义 songlist 并在完成后将其传递给回调:

var complete = function (songlist) {
console.log(songlist);
}
db.serialize(function () {
var songlist = []

db.each("SELECT rowid AS id, info FROM lorem where info like '%" + song + "%'", function (err, row) {
songlist.push(row.info);
console.log("each")
}, function(){
complete(songlist)
}
})
)}

当然,您实际上并不需要单独的函数 - 您可以直接在数据库函数的回调中记录歌曲节。

关于javascript - 如何使变量可用于 JavaScript 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com