Обновить старую функцию до асинхронного ожидания - PullRequest
1 голос
/ 10 апреля 2019

Я хочу обновить эту функцию до асинхронного, но не могу получить объект пользователей, сопоставленный с объектом взаимодействий, для возврата данных в том же формате, и мои значения в асинхронной функции поступают на ноль клиента.В консоли я получаю только объект Promise и не определен.

Это мой рабочий код:

Interaction.findAll({
    where: {
        targetUserId: fbId,
        status: 'invited'
    }, 
    order: [['createdAt', 'DESC']]
}).then(function (interactions) {
    Promise.all(interactions.map(interaction =>
        User.findOne({
             where: {
                 facebookUserId: interaction.userId
             },
             attributes: ['firstName', 'facebookUserId', 'pictureUrl']
    }))).then(function (users) {
    res.status(200).send(users.map(user => user.dataValues));
    })
},

Это то, что у меня есть, но мои данные не возвращаются клиенту в том же формате:

try {
    const interactions = await Interaction.findAll({
        where: {
            targetUserId: userId,
            status: 'invited'
        },
        attributes: ['lastReplyAt', 'seen', 'userId'],
    })

    const users = await interactions.map(interaction => User.findOne({
        where: {
            facebookUserId: interaction.userId
        },
        attributes: ['firstName', 'facebookUserId', 'pictureUrl'],
    }))
    res.status(200).send(users.map(user => user.dataValues));
}
catch (error) {
    console.log(error);
    res.status(500).send(error);
}

Если я возвращаю только объект пользователя, ошибка более конкретна и говорит, что firstName равно nil.Возврат отображенного пользователем объекта дает мне ключевую ошибку.

1 Ответ

2 голосов
/ 10 апреля 2019

Попробуйте это:

interaction = await Interaction.findAll({
    where: {
        targetUserId: fbId,
        status: 'invited'
    }, 
    order: [['createdAt', 'DESC']]
})

users = await Promise.all(interactions.map(interaction => {
  User.findOne({
  where: {
    facebookUserId: interaction.userId
  },
  attributes: ['firstName', 'facebookUserId', 'pictureUrl']})
})

res.status(200).send(users.map(user => user.dataValues));
...