繁体   English   中英

如何使用异步等待 nodejs function

[英]how to use async await nodejs function

我正在尝试使用当客户向他们的购物车添加东西时生成的唯一 session id 创建我的客户购物车。 问题是,它在创建表(购物车)之前插入购物车。 我觉得这是一个异步等待的事情,有人可以帮忙吗?

    app.post('/addtocart', (req, res) => {

    createCartTable (req, res)

    var user = "insert into " + req.session.sessionID + " (NAME, PRICE, QUANTITY, IMAGE_URL, PRODUCTID) VALUES ('" + req.body.name + "', '" + req.body.price + "', '" + req.body.quantity + "', '" + req.body.image_url + "', '" + req.body.productid + "')";
    ibmdb.open(db2ConnString, function(err, conn) {
        if (err) return console.log(err);
        conn.query(user, function(err, rows) {
            if (err) {
                console.log(err);
            }

            selectcart(req, res)
            // res.render("catalogue", {
            //     page_title: "catalogue",
            //     data: rows,
            // })

            conn.close(function() {
            });
        });
    });
}) 

createCartTable (req, res) function 直到插入查询完成后才会被调用。 我怎样才能解决这个问题?

我能够将该插入查询创建到它自己的 function 中,然后我从创建表 function 中调用它...异步内容的解决方法,可能不是正确的方法,但它有效。

createCartTable 是异步 function 吗? 也就是说,在别处定义的时候,是不是定义为async createCartTable(){...}

以下假设是:是的,这是一个异步等待问题。 由于createCartTable()是异步的,因此在createCartTable()完成解析/拒绝其 promise 时,允许执行其后的所有其他内容。 您需要做的就是将createCartTable()更改为await createCartTable() await 关键字告诉程序停止代码执行,直到 function 已完成其 promise。

如果您想了解有关 async/await 和 Promise 的额外上下文,可以查看以下一些链接,或者直接询问。 有时 Mozilla 文档有点粗糙。

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

编辑:我看到了您自己的评论-实际上这只是您必须在异步/等待之前做事的方式,如果您想保留它,它就可以正常工作,异步/等待本质上只是承诺和异步的语法糖东西。 使事情更容易阅读和理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM