2014-11-20 2 views
1

흘수선 ORM을 사용하여 루프에서 여러 항목을 만들고 싶습니다. 생성 된 각 객체가 배열로 푸시됩니다. 모든 개체가 만들어지면 전체 배열을 반환해야합니다. 나는 나무의 복귀가 만든 잎의 배열과 동일한 배열 구성원을 갖고 싶어Promise : after 루프를 실행하십시오.

share: function(req, res, next) { 
    var params = {}, 
     id = req.param('id'), 
     img = {}, 
     targets; 

    if (!req.param('name')) { 
     res.status(400); 
     return res.json('Error.No.Name') 
    } 

    var promiseLoop = function(Tree) {  // Function called after creating or finding Tree to attach to 
     var array = []; 
     if(!req.param('targets')) return Tree; // No targets provided => exit 

     targets = JSON.parse(req.param('targets')); 
     _.each(targets, function(target) { 
     params = { 
      target : target, 
      image: Tree.id, 
      message : req.param('message') 
     }; 

     Leaf 
      .create(params) 
      .then(function(Leaf) { 
      array.push(Leaf); 
      }); 
     }); 

     Tree.array = array; 
     return Tree; 
    } 

    if (!id) { 
     params.owner = req.session.user ; 
     params.name = req.param('name'); 

     Tree 
     .create(params) 
     .then(function(Tree) { 
      res.status(201); // Status for image creation 
      return Tree; 
     }) 
     .then(promiseLoop) 
     .then(function(data) { res.status(201); res.json(data);}) 
     .catch(function(err) { res.status(400); res.json(err);}); 
    } 
    } 

}; 

:

여기 내 코드입니다.

그러나 물론

Tree.array = array; 
    return Tree; 

실행 부분 befure 어레이

채워된다. 는 내 나무 개체 내가 응답에서 얻을 수 있습니다 :

나는 모든 객체가 생성 된 후에 만이 부분을 실행해야하기 위해 할 완 무엇
{ 
..., 
"array": [] 
} 

?

미리 감사드립니다.

답변

1

약속은 then 연쇄를 통해 이전 약속이 완료되었을 때를 알 수 있습니다. 당신은 그것을 활용할 수 있고 사용해야합니다.

반환 promiseLoop에서 약속 : 귀하의 답변에 대한

var promiseLoop = function(Tree) { // are you sure about that naming? 
    if(!req.param('targets')) return Tree; 
    targets = JSON.parse(req.param('targets')); 
    var leaves = targets.map(function(target){ 
    return Leaf.create({ // map each target to a leaf 
     target : target, 
     image: Tree.id, 
     message : req.param('message') 
     }); 
    }); 

    return Promise.all(leaves).then(function(leaves){ 
     Tree.array = leaves; // assign to tree 
    }).return(Tree); // finally resolve the promise with it 
} 
+0

감사합니다. 명명과 관련하여 Tree와 Leaves가 하나의 예입니다. Tree.array가 좋은 값으로 존재하는 경우에도 {}을 사용하여 400 응답을 받았습니다. 나는 내 순서의 끝에서 잡기에 들어간다. – Aston

관련 문제