Обещание в массиве обещаний в мангусте - PullRequest
0 голосов
/ 20 января 2020

Я написал следующий код, чтобы получить все туры пользователя. И когда я получаю их, я обновляюсь следующим образом. Код отлично подойдет для родительских обещаний. Статус тура корректно обновляется. И тогда мне нужно подсчитать каждое предложение тура. Но внутреннее обещание вернет ноль. Может ли кто-нибудь помочь мне решить эту проблему.

const response = await Tour.find({ customer: user.id }).sort({
        createdAt: -1
    });

    const toursPromises = response.map(async tour => {
        if (tour.tourStatus === 'new' && tour.transferDate < Date.now()) {
            return await Tour.findByIdAndUpdate(
                tour._id,
                { $set: { tourStatus: 'expired' } },
                { new: true }
            );
        } else if (tour.tourStatus === 'new') {
            return await Tour.findByIdAndUpdate(
                tour._id,
                {
                    $set: {
                        offers: await Offer.find({
                            tour: tour._id,
                            offerStatus: 'new'
                        }).length
                    }
                },
                { new: true }
            );
        } else {
            return tour;
        }
    });

    const tours = await Promise.all(toursPromises);

1 Ответ

2 голосов
/ 20 января 2020

find() не возвращает значение со свойством length, но обещание. Так что вам нужно await find(), а не find().length. Используйте круглые скобки:

    (await Offer.find({
        tour: tour._id,
        offerStatus: 'new'
    })).length

Примечание: возможно, такие ошибки будут встречаться реже, если мы уделим больше внимания тому, как мы говорим об обещаниях. Не говорите "внутреннее обещание возвращает ноль" , но: "внутреннее обещание разрешает к нулю" . Потому что: обещания ничего не возвращают - они не функции, а просто объекты. Эти объекты изменяют состояние при разрешении со значением или отклонении по причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...