Вернуть функцию Child Promise для переменной в функции Parent Promise? - PullRequest
0 голосов
/ 03 октября 2018

У меня проблема с функцией Promise.Я использую NodeJS + sequelizeJS

У меня есть функция Child Promise для получения User Data в таблице auth_user:

function sequelize_user (id_in) {
  var promises = []
  var querydb = `SELECT * FROM auth_user WHERE id IN (${id_in})`;
  promises.push(
    db.sequelize.query(querydb, { type: db.sequelize.QueryTypes.SELECT})
    .then(res => {
      return res
    })
  )
  return Promise.all(promises);
}

И у меня есть функция Parent Promiseчтобы получить беседу, в которой есть участники в качестве пользователя.

function sequelize_conversation (conversation_id, req) {
  var promises = [];
  for (let id of conversation_id) {
    promises.push(
      db.ConversationPerson.findAll({ where: {'conversation_id': id, 'user_id': { [Op.ne]: req.user.user_id }} })
      .then(participants => {
        if (cvs_person.length) {
          return {
            'conversation_id': id,
            'with_user': (function() {
             sequelize_user(cvs_person.user_id)
              .then(user => {
                console.log(user) // -> { id: 1, username: 'feedgit' }
                return user // -> {} ?????????
              })
            })()
          }
        } else {
          return { 'conversation_id': id }
        }
      })
    );
  }
  return Promise.all(promises);
}

В этом коде:

'with_user': (function() { sequelize_user([participants[0].user_id]) .then(user => { console.log(user); return user }) })()

Я хочу получить User с помощью функции Child Promise sequelize_user, но этовозвращает {}.Это не правда.

Что не так с моим кодом?Я думаю, это из-за неправильного вызова функции Promise.

1 Ответ

0 голосов
/ 03 октября 2018

Вы, похоже, ищете

db.ConversationPerson.findAll({
  where: {'conversation_id': id, 'user_id': { [Op.ne]: req.user.user_id }} 
}).then(participants => {
  if (cvs_person.length) {
    return sequelize_user(cvs_person.user_id).then(user => {
//  ^^^^^^                                   ^^^^^
      console.log(user) // -> { id: 1, username: 'feedgit' }
      return {
//    ^^^^^^^^
        conversation_id: id,
        with_user: user,
//                 ^^^^
      };
    });
  } else {
    return { 'conversation_id': id }
  }
})
...