假设我有两个模式,即车辆和用户,以及一个名为 buyVehicle 的功能,其中 vehicleId 从请求正文中添加通过使用vehicleId查询车辆架构获得的车辆信息到登录用户文档中。
对于带有vehicleId 00ford125的ex-buyVehicle(),会将与该特定车辆相关的所有信息添加到登录的用户文档中。
代码:
function buyVehicle(req, res) {
Vehicles.findOne({'vehicleId' : req.body.vehicleId}).exec()
.then(function(vehicle) {
if(vehicle) {
return User.findOne({'_id': req.user._id}).exec();
}
})
.then(function(user) {
if(user) {
// here I need to vehicle object which was queried above
user.save();
}
})
.catch(function(err) {
console.log(err);
});
}
在第二个承诺中(我发表评论),我需要上面查询的车辆对象,以便我可以提取信息并将其添加到用户对象。
因此,简单来说,我如何在Mongoose承诺之间传递数据?
答案 0 :(得分:0)
承诺有许多不同的方法,但也许最简单的方法就是将值保存在较高的范围内,如此......
function buyVehicle(req, res) {
let vehicle; // 1. Declare the variable in the function scope
Vehicles.findOne({'vehicleId' : req.body.vehicleId}).exec()
.then(function(foundVehicle) {
if(foundVehicle) {
vehicle = foundVehicle; // 2. Assign it here...
return User.findOne({'_id': req.user._id}).exec();
}
})
.then(function(user) {
if(user) {
// 3. Call it here
console.log(vehicle);
user.save();
}
})
.catch(function(err) {
console.log(err);
});
}