我正在尝试更好地理解 JS。我定义了一个变量测试,我尝试在函数内部更新它,以便它获取变量 mySum 中包含的对象列表的值。尽管正确打印到控制台,但在最后一行测试以查看它是否已更新时, mySum 会打印 undefined 。我可以获得一些有关更新全局变量测试方面的错误操作的指导吗?
var test;
knex("my_table").sum("funds").where("user_id",2)
.then(function (mySum){
return mySum;
})
.then(function (mySum){
knex("my_table").select("funds").where("funds",mySum[0]['sum'])
.bind(console)
.then(console.log)
test = mySum;
});
console.log(test);
编辑:我现在明白了。要在 EJS 中使用它,需要构建类似的东西来获取代表两个不同用户资金的两个变量,在这种情况下......
app.get("/", function(req,res){
knex("my_table").sum("funds").where("user_id",2)
.then(function(mySum){
knex("my_table").sum("funds").where("user_id",3)
.then(function(mySum2){
res.render("home", {
page_title: 'home',
mySum: mySum[0]['sum'],
mySum2: mySum2[0]['sum']
});
})
});
最佳答案
正如其他人评论的那样,console.log(test)
在 test = mySum
之前触发,因为您的代码是异步的。 .then
是一个 promise ,在前面的代码完成时触发,但其余代码将同时继续处理。 Here是一些关于 JavaScript 中的 Promise 的文档。
关于javascript - 为什么 javascript 变量打印到控制台时未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945185/