在mongoose承诺之间传递数据?

时间:2018-05-01 07:21:48

标签: mongodb express mongoose

假设我有两个模式,即车辆用户,以及一个名为 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承诺之间传递数据?

1 个答案:

答案 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);
    });
}