2014-05-20 1 views
0

일부 결과 데이터를 첨부하기 위해 결과 집합을 반복하고 각 결과에 대해 다른 쿼리를 실행하는 데 문제가 있습니다.쿼리 결과를 반복하고 QueryChainer를 사용하여 각 결과에 대해 다른 쿼리를 실행하십시오.

Sequelize.js에 대한 Github 문제를 살펴본 결과 use QueryChainer to achieve this 일 수 있음을 알았습니다. 그러나, 나는 아직도 이것에 초심자이기 때문에, 나는 이렇게하는 방법을 알아낼 수 있었다 havent. 내 for 루프가 비동기 적으로 실행되어 추가 데이터없이 응답이 전송됩니다. 여기

내가 지금 그것을하고 있어요 방법은 다음과 같습니다 응답에

// in blogs.js 
var db = require('../models') 

exports.findPosts = function(req, res) { 

    if (req.User) { 

    req.User.getPosts({ 
     include: [ 
     { model: db.User, attributes: ['displayName', 'profilePicture'] }, 
     { model: db.Game, attributes: ['name'] } 
     ] 
    }).success(function(posts) { 

     console.log('Starting the loop...') 

     for (var i in posts) { 

     db.PostLikes.count({ where: { PostId: i.id } }).success(function(likes) { 

      i.Likes = likes 
      console.log('Fetched Likes for post #' + i.id) 

     }) 

     } 

     console.log('This should appear last!') 
     res.json(posts) 

    }).error(function(err) { 

     console.log(err) 
     res.send(404) 

    }) 

    } else { 
    res.send(404) 
    } 
} 

위 코드의 결과는 각 post 항목에 추가 된 Likes 속성없이 전송된다. console.logdb.PostLikes.count() 호출의 비동기 특성으로 인해 순서가 잘못되었습니다.

누군가가 나를 달성하기 위해 QueryChainer를 사용하는 방법을 보여줄 수 있다면 엄청난 도움이 될 것입니다.

답변

2

이 문제에 대한 해결책을 찾고 누구에게 :

나는 on Github 이상 SequelizeJS의 관리자들 중 하나의 도움으로 그것을 해결. 내 솔루션의 일부는 Promises에 'bluebird'라이브러리를 사용하는 것이 었습니다. 다른 라이브러리를 사용할 수도 있지만 아직 다른 코드로 코드를 테스트하지 않았습니다.

Here's a Gist of my code. 나는이 문제에 대해 도움이되기를 바랍니다.

관련 문제