不被称为后续交易方法

我是新来表达/节点和使用Sequelize作为ORM。不被称为后续交易方法

我试图创建一个列表,然后一旦创建了列表我想更新项目表中的item.isListed布尔值,但是我正在努力获取要调用的事务方法 - 任何人都可以告诉我我在做这段代码有什么问题?

/API /上市

var models = require('../../models'); 

var router = require('express').Router();

router.route('/:id')

.post(function(req,res){

models.Item.findOne({

where : {

itemID : req.params.id

}

}).then(function(item){

if (item){

if (item.owner != req.decoded.user.username){

res.json({message:"not your item"})

} else {

//This message is displayed in console.

console.log("entering transaction");

return models.db.sequelize.transaction(function(t){

//This message is not displayed in console.

console.log("inside transaction")

return models.Listing.create({

sellerID : req.decoded.user.username,

startDate : req.body.startDate,

endDate : req.body.endDate,

startPrice : req.body.startDate,

reservePrice : req.body.reservePrice,

isSold : 0,

itemID : req.params.id

}, {transaction: t}).then(function(t){

return item.updateAttributes({

isListed : 1

}, {transaction: t});

})

}).then(function(result){

res.json({message:"success"})

}).catch(function(err){

res.json(err);

})

//end of else block

}

//end of if item block

}

}).catch(function(err){

res.json(err);

})

});

module.exports = router;

回答:

你试过使其

return models.db.sequelize.transaction(function(... 

当你有承诺的一个链,你需要返回每一个承诺,否则执行只会继续无需等待。知道你在哪里添加了console.log()和你正在记录的内容会很有帮助。

另一件事可能会让你的代码更具可读性和更易于调试,这就是你如何更新项目。既然你有项目的引用您可以更新这样

return item.updateAttributes({isListed: 1}, {transaction: t}); 

return models.Listing.create({  

sellerID : req.decoded.user.username,

startDate : req.body.startDate,

endDate : req.body.endDate,

startPrice : req.body.startDate,

reservePrice : req.body.reservePrice,

isSold : 0,

itemID : req.params.id

}, {transaction: t})

.then(function(t){

return item.updateAttributes({

isListed : 1

}, {transaction: t});

})

在这个片段中,你有then(function(t) {...被覆盖原始的交易对象。返回的内容实际上是新创建的列表。我不记得在你编辑你的问题之前是否有这个问题,但它可能是问题的根源。

以上是 不被称为后续交易方法 的全部内容, 来源链接: utcz.com/qa/266382.html

回到顶部