2016-08-19 2 views
0
function main() { 
    matchUserToChatRoom(senderID) 
    .then(function(chatRoom) { 
     //FIXME: I want to be able to use chatRoom from the below function 
     console.log(chatRoom) 
    }) 
} 

function matchUserToChatRoom(userId) { 
    return models.User.findOne({where: {messenger_id: userId}}) 
    .then(function(user) { 
     models.ChatRoom 
     .findOrCreate({where: {status: "open"}, defaults: {status: "open"}}) 
     .spread(function(chatRoom, created) { 
      chatRoom.addUser(user).then(function(chatRoom) { 
      //FIXME: I want to use this "chatRoom" inside the main function 
      }) 
     }) 
    }) 
    }) 
} 

Как вернуть объект chatRoom, являющийся результатом вложенных обещаний, основной функции?Возврат результата обещания

+0

Откуда берутся 'findOrCreate' и' spread'? Это COTS или пользовательский код? – sp00m

+0

@ sp00m они из продолжения. Оба возвращают обещание. –

+0

Вы не возвращаете его. Вы «ждете» его. –

ответ

4

Не забудьте вернуть обещания, чтобы быть прикован.

function matchUserToChatRoom(userId) { 
    return models.User.findOne({where: {messenger_id: userId}}) 
    .then(function(user) { 
     return models.ChatRoom 
     .findOrCreate({where: {status: "open"}, defaults: {status: "open"}}) 
     .spread(function(chatRoom, created) { 
      return chatRoom.addUser(user); 
     }) 
    }) 
    }) 
} 
+0

Это правильный ответ. Спасибо! –

-1

Это для получения идеи. Вы также должны использовать reject.

function matchUserToChatRoom(userId) { 
return new Promise(function(resolve, reject){ 
    models.User.findOne({where: {messenger_id: userId}}) 
    .then(function(user) { 
     models.ChatRoom 
     .findOrCreate({where: {status: "open"}, defaults: {status: "open"}}) 
     .spread(function(chatRoom, created) { 
      chatRoom.addUser(user).then(function(chatRoom) { 
      resolve(chatRoom); 
      //FIXME: I want to use this "chatRoom" inside the main function 
      }) 
     }) 
    }) 
    }) 
} 
}); 
+1

Нет, вы ** не ** должны создавать свои собственные обещания. Это «анти-шаблон» конструктора обещаний. –

Смежные вопросы