我在两个表,产品和服务之间存在多对多关系,通过连接表与成本列product_service连接。当我创建尝试向产品添加服务时,第一次调用不会返回更新的值,即使数据库已更新,我知道因为我检查它,我只能看到我的应用程序上的更新值另一个电话。
var query = {
where: {
id: req.params.id
},
include: defaultIncludes()
}
models.products.findOne(query)
.then(function (product) {
if (!product) {
return res.status(404).json({message: 'Product not found' });
} else {
this.product = product;
return models.services.findById(req.body.service_id);
}
})
.then(function (service) {
return this.product.addServices(service);
})
.then(function (result) {
return this.product.save();
// return models.products.findOne(query);
})
.then(function (product) {
return res.status(200).json(product)
})
.catch(function (err) {
logger.error(err);
return res.status(500).json({error: err.message});
});
我认为它可能与promises有关,无论是对于addServices还是save函数,但我似乎无法弄明白。
答案 0 :(得分:1)
首先,您不需要在product.save()
之后致电product.addServices(service)
。然后,这2个函数不会将更新的实例作为回调函数的第一个参数传递。
因此,在您的情况下,您可以执行以下操作:
...
.then(function (service) {
return this.product.addServices(service);
})
.then(function () {
return res.status(200).json(this.product)
})
.catch(function (err) {
logger.error(err);
return res.status(500).json({error: err.message});
});