Javascript 为什么我的全局变量没有定义?
我是JavaScript新手。我不明白为什么它会在正确的id之前在控制台上打印未定义的值Javascript 为什么我的全局变量没有定义?,javascript,Javascript,我是JavaScript新手。我不明白为什么它会在正确的id之前在控制台上打印未定义的值 VisaFam.dbs.addFamily = function(nom) { var db = VisaFam.dbs.db; var family_id; db.transaction(function(tx) { tx.executeSql("INSERT INTO family (nom) VALUES (?)", [nom],
VisaFam.dbs.addFamily = function(nom) {
var db = VisaFam.dbs.db;
var family_id;
db.transaction(function(tx) {
tx.executeSql("INSERT INTO family (nom) VALUES (?)",
[nom],function(tx, results){
family_id= results.insertId; //i want to return this
console.log(results.insertId); // this prints the correct value
});
});
console.log(family_id); // this shows undefined
return family_id; // the return is thus "undefined"
}
我试图返回插入的id,但返回时得到“未定义”,但控制台显示正确的id
VisaFam.dbs.addFamily = function(nom) {
var db = VisaFam.dbs.db;
var family_id;
db.transaction(function(tx) {
tx.executeSql("INSERT INTO family (nom) VALUES (?)",
[nom],function(tx, results){
family_id= results.insertId; //i want to return this
console.log(results.insertId); // this prints the correct value
});
});
console.log(family_id); // this shows undefined
return family_id; // the return is thus "undefined"
}
我没有您程序的完整上下文,但似乎
db.transaction
函数是异步的。因此,console.log()
语句在family\u id变量赋值之前运行
要测试这一点,您可以更改行var family\u id代码>至var系列\u id=“测试”代码>
控制台应立即吐出“测试”
要记录所需的正确id,需要将console.log()
调用移动到db.transaction
函数中,以确保代码仅在设置值后执行。I/O调用在js中异步发生,您应该从回调或承诺中获得返回值:
VisaFam.dbs.addFamily = function(nom, callback) {
var db = VisaFam.dbs.db;
var family_id;
db.transaction(function(tx) {
tx.executeSql("INSERT INTO family (nom) VALUES (?)",
[nom],function(tx, results){
family_id= results.insertId; //i want to return this
console.log(results.insertId); // this prints the correct value
callback(results);
});
});
}
然后将addFamily称为:
addFamily(nom, function(response) {
//handle response
})
I/O调用在JS中异步进行非常感谢Brandon,我现在明白了。