我正在尝试使用客户向购物车添加商品时生成的唯一会话 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)
函数直到插入查询完成后才会被调用。我该如何解决这个问题?
答案 0 :(得分:0)
我能够创建将该插入查询放入它自己的函数中,然后我从创建表函数中调用它......异步内容的解决方法,可能不是正确的方法,但它有效。
答案 1 :(得分:0)
createCartTable 是一个异步函数吗?也就是说,在别处定义的时候,是不是定义为async createCartTable(){...}
?
以下假设是:
是的,这是一个异步等待问题。由于 createCartTable()
是异步的,因此在 createCartTable()
完成解析/拒绝其承诺时允许执行其后的所有其他内容。您需要做的就是将 createCartTable()
更改为 await createCartTable()
。 await 关键字告诉程序停止代码执行,直到该函数履行其承诺。
如果您想了解有关 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
编辑:我看到了你自己的评论——这实际上就是你在异步/等待之前必须做的事情!如果你想保留它,它就可以很好地工作,async/await 本质上只是承诺和异步内容的语法糖,使事情更容易阅读和理解。