为什么javascript变量打印到控制台时未定义
我正在努力更好地理解JS。我定义了一个变量测试,我试图在函数内部更新它,以便它获取变量mySum中包含的对象列表的值。尽管可以正确地打印到控制台,但mySum在最后一行测试时打印未定义的内容,以查看是否已更新。在更新全局变量test时,我是否可以得到一些关于我的错误操作的指导为什么javascript变量打印到控制台时未定义,javascript,node.js,Javascript,Node.js,我正在努力更好地理解JS。我定义了一个变量测试,我试图在函数内部更新它,以便它获取变量mySum中包含的对象列表的值。尽管可以正确地打印到控制台,但mySum在最后一行测试时打印未定义的内容,以查看是否已更新。在更新全局变量test时,我是否可以得到一些关于我的错误操作的指导 var test; knex("my_table").sum("funds").where("user_id",2) .then(function (mySum){ return mySum
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
是一个承诺,当前面的代码完成时触发,但代码的其余部分将同时继续处理。是一些关于JavaScript承诺的文档 正如其他人所评论的,console.log(test)
在test=mySum
之前触发,因为您的代码是异步的。.then
是一个承诺,当前面的代码完成时触发,但代码的其余部分将同时继续处理。是一些关于JavaScript承诺的文档 您可能应该阅读有关异步编程的内容,以便更好地理解代码的问题。提示:console.log
在test=mySum
之前被调用.then()
是异步的。伙计们,这是评论部分。这是供评论的。回答如下。您可能应该阅读有关异步编程的内容,以便更好地理解代码的问题。提示:console.log
在test=mySum
之前被调用.then()
是异步的。伙计们,这是评论部分。这是供评论的。在阅读了文档之后,我尝试了以下函数sums(){var val=await knex(“我的表”).sum(“资金”).where(“用户id”,2)。然后(函数(值){return value;});return val;};var test2=总和();log(test2,“test2”)代码>但是我得到了var test2=async function sums(){^^^^^^^^^^^^^^^^^ SyntaxError:Unexpected token function
在阅读文档后,我尝试了以下function sums(){var val=wait knex(“我的表”).sum(“资金”).where(“用户id”,2)。然后(函数(值){return value;});return val;};var test2=sums();console.log(test2,“test2”);
但是我得到的是var test2=async函数sums(){^^^^^^^^^^^^^^^语法错误:意外的令牌函数