Передача данных между обещаниями мангуста?

Скажем, у меня есть две схемы, а именно Транспортные средства и Пользователи, и функция с именем купить, которая берет VehicleId из тела запроса и добавляет информацию о транспортном средстве, полученную путем запроса схемы транспортных средств с использованием транспортного средства в документ вошедшего в систему пользователя.

Например, buyVehicle () с vehicleId 00ford125 добавит всю информацию, относящуюся к этому конкретному автомобилю, в документ авторизованного пользователя.

Код:

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.info(err);
    });
}

Во втором обещании (где я оставил комментарий) мне нужен объект транспортного средства, который был запрошен выше, чтобы я мог извлечь информацию и добавить ее к объекту пользователя.

Итак, простыми словами, как передавать данные между обещаниями Mongoose?

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть много разных способов использования обещаний, но, возможно, самый простой - просто сохранить значение в верхней области видимости, вот так ...

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.info(vehicle);
            user.save();
        }
    })
    .catch(function(err) {
        console.info(err);
    });
}

Я тоже думал о чем-то подобном. Спасибо!

Taran Vohra 01.05.2018 13:08

Не беспокойтесь, если это ответило на ваш вопрос, не могли бы вы отметить его как ответ? Это поможет людям, которые ищут его в будущем, будет легче.

Elliot Blackburn 01.05.2018 16:57

Другие вопросы по теме