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

标签 javascript node.js

我正在尝试更好地理解 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/

相关文章:

node.js - 为什么我不能使用相关 mongo 文档中的 id 在 GridFS 上设置 id

node.js - 将 Socket.io-redis 作为适配器添加到 Socket.io 实例时出现错误

c++ - 如何将 v8::String 转换为 const char *

javascript - NodeJS res.body 仅在一台路由器上未定义

javascript - Home 不包含名为 Home 的导出

javascript - 使用 JavaScript 每 30 秒刷新一个 div

javascript - 通过app.use()调用认证中间件

node.js - 微服务:如何处理有界上下文之间需要数据的场景

javascript - Node.js 中的 REST 客户端

javascript - 如何根据 AJAX 请求在设定的时间段内显示加载动画