экспресс и секвализация преобразование круговой структуры в JSON - PullRequest
0 голосов
/ 17 января 2019

У меня есть функция асинхронного секвенирования

async getTrips() {
    let trips = await Trip.findAll({
        order: [['id']]
    });

    const data  = trips.map(trip => ({
        ...trip,
        milestones: async () => await Milestone.findAll({
            where: {
                trips_id: trip.id
            }
        }),
        vendor_charges: async () => await VendorCharge.findAll({
            where: {
                trips_id: trip.id
            }
        }),
        trip_notes: async () => await TripNote.findAll({
            where: {
                trips_id: trip.id
            }
        }),
        pieces: async () => await Pieces.findAll({
            where: {
                trips_id: trip.id
            }
        })
    }))
    return data
}

, который затем запускается в экспресс-маршрутизаторе

tripsRouter.get('/getAllTrips', (req, res) => {
    const errors = validationResult(req)
    if (!errors.isEmpty())
        return res.status(422).json(errors.array())
    tripsService.getTrips()
    .then(trips =>
        res.status(200).json({
            exception: false,
            payload: trips
        })
    );
})

это похоже на ошибку "Преобразование круговой структуры в JSON", когда она возникает

это стек ошибок:

(узел: 9322) UnhandledPromiseRejectionWarning: TypeError: Преобразование круговой структуры в JSON в JSON.stringify () на o.getTrips.then.e (/home/sandra/development/lakefrontcargo-v2/dist/index.js:1:57753) в (узел: 9322) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 9322) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания не рекомендуется. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения. [nodemon] перезапуск из-за изменений ...

1 Ответ

0 голосов
/ 17 января 2019

Поскольку map возвращает массив обещаний, поэтому я предлагаю вам использовать Promise.all для ожидания завершения всех обещаний.

const data  = Promise.all ( trips.map(trip => ({
    ...trip,
    milestones: async () => await Milestone.findAll({
        where: {
            trips_id: trip.id
        }
    }),
    vendor_charges: async () => await VendorCharge.findAll({
        where: {
            trips_id: trip.id
        }
    }),
    trip_notes: async () => await TripNote.findAll({
        where: {
            trips_id: trip.id
        }
    }),
    pieces: async () => await Pieces.findAll({
        where: {
            trips_id: trip.id
        }
    })
})) );


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