Запрос с помощью sequelizejs возвращает undefined

Модель.JS файл содержит эту модель :

exports.Conversations = db.sequelize.define('conversations', {
room_id: {        
    type: db.Sequelize.STRING
},                        
user_id: {
    type: db.Sequelize.STRING
},
friend_id: {
    type: db.Sequelize.STRING
},
},  {
timestamps: true,
createdAt:'created_at',
updatedAt:'updated_at',
deletedAt:'deleted_at',
freezeTableName: true // Model tableName will be the same as the model name
});

в Query.js у меня есть следующая функция :

exports.checkRoom = function(user_id,friend_id) {
models.Conversations.findOne({ where: { $or: [{user_id: user_id , friend_id: friend_id}, {user_id: friend_id , friend_id: user_id}]  }} ).then(function(conversation) {
   return conversation;
});
}

эквивалентный:

SELECT 
    "id", "room_id", "user_id", "friend_id", "created_at", "updated_at" 
FROM  
    "conversations" AS "conversations" 
WHERE 
    (("conversations"."user_id" = '127' AND "conversations"."friend_id" = '124') 
     OR ("conversations"."user_id" = '124' AND "conversations"."friend_id" = '127')) 
LIMIT 1;

При вызове этой функции в кластере.js

var conversation = query.checkRoom(data.userId,data.friendId));

Я понимаю, что разговор неопределенный.

Нашел пару решений, чтобы поймать объект обещают, но не работал.

Ждем ваших ответов.

РЕДАКТИРОВАТЬ

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

conversationId = query.checkRoom(data.userId, data.friendId).then(function(conversation) { return conversation.dataValues.id; })

I get that my var conversationId is [object Promise].

Как я могу получить и использовать это обещание снаружи .тогда () функция ?

1 ответ

  1. Вы пытаетесь использовать checkRoom()в качестве синхронной функции, что не так (как большинство функций, имеющих дело с вводом-выводом в узле).

    Вместо этого следует вернуть обещание, возвращенное findOne()и обработать разрешение (и отклонение) этого обещания в вызывающем коде:

    // query.js
    exports.checkRoom = function(user_id, friend_id) {
      return models.Conversations.findOne({ where: { $or: [{user_id: user_id , friend_id: friend_id}, {user_id: friend_id , friend_id: user_id}]  }} );
    }
    
    // calling code
    query.checkRoom(data.userId, data.friendId).then(function(conversation) {
      // do something with the database result
      ...
    })