为什么javascript变量打印到控制台时未定义

为什么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

我正在努力更好地理解JS。我定义了一个变量测试,我试图在函数内部更新它,以便它获取变量mySum中包含的对象列表的值。尽管可以正确地打印到控制台,但mySum在最后一行测试时打印未定义的内容,以查看是否已更新。在更新全局变量test时,我是否可以得到一些关于我的错误操作的指导

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(){^^^^^^^^^^^^^^^语法错误:意外的令牌函数