我在代码中添加了一些注释,以便您可以看到问题所在,基本上......我想在db.where()函数之后使用“可用”货币,以便可以在if语句中使用它。毫无疑问,这很容易修复,但我很糟糕。谢谢你的时间。
db.where('users', {name: user.username}).then(function(result) {
var currency = result.items[0].currency;
console.log(currency);
});
console.log("Program gets to this point without error.");
console.log(currency); // Doesn't work as currency is no longer defined.
if (typeof args[2] == 'number' && args[2] <= currency) {
var betOkay = true;
console.log("betOkay is " + betOkay);
}
答案 0 :(得分:5)
您必须将代码移动到回调或您从回调中调用的其他函数。回调是异步执行的,因此不是currency
不再定义,而是它未定义尚未并且它不在同一范围内。< / p>
答案 1 :(得分:1)
您应该在回调中使用货币。
db.where('users', {name: user.username}).then(function(result) {
var currency = result.items[0].currency;
console.log(currency);
if (typeof args[2] == 'number' && args[2] <= currency) {
var betOkay = true;
console.log("betOkay is " + betOkay);
}
});
答案 2 :(得分:1)
JavaScript具有功能范围。变量在定义的函数中可用。但JavaScript也有闭包,它允许内部函数访问外部函数中定义的变量(参见JavaScript closures)。
变量 currency 是在您用于回调的匿名函数中定义的。所以它的范围是回调函数。这就是其他地方无法访问的原因。
正如其他答案所示,您可以通过在回调中包含需要访问货币的代码来实现目标,但您也可以在外部范围内声明变量 currency 并进行设置(通过闭包) )在回调上。
见下文:
var currency; // defined in the scope where it will be used
db.where('users', {name: user.username}).then(function(result) {
currency = result.items[0].currency; // has access to it via closure
console.log(currency);
});
console.log("Program gets to this point without error.");
console.log(currency);
if (typeof args[2] == 'number' && args[2] <= currency) {
var betOkay = true;
console.log("betOkay is " + betOkay);
}