2014-05-17 6 views
1

HTTP 요청에서 작동하는 컨트롤러에 프런트 엔드에 추가 된 게시물을 저장하는 코드가 있습니다. 그래서 저는 Model.create()와 같은 것을합니다. 이제 콜백이 발생합니다. 프런트 엔드가 사용자에게 적절한 메시지를 표시 할 수 있도록 게시물이 성공적으로 추가되었는지 여부를 반환하려고합니다. 그러나 create 메소드는 비동기 적으로 작동합니다. 다음 은 샘플 코드입니다 :비동기 성질을 관리하는 SailsJS/NodeJS

create: function(req, res){ 

    Activity.create(req.body).done(
      function(err, persistedActivity) { 

        // Error handling 
        if (err) { 

         return res.json({success: false}); 
         // The Activity could not be created! 
        } else { 

         return res.json({success : true}); 
        } 
      } 
    ); 

}

그러나 Activity.create() 메서드는 비동기이기 때문에이 코드가 작동하지 않습니다. 다른 질문이나 게시물에서도 읽었습니다. 내가 찾고있는 정확한 구현을 암시하는 것은 없지만, "노드의 비동기 성질과 싸우지 말라. 나중에는 다 치지 않을 것이다."라고 말하면서, 다른 모든 사람들처럼 나를 믿는다. 나는 상처 받기를 원하지 않는다. 본질적으로 이것을 처리하는 방법에 대한 제안이 필요합니다.

create: function(req, res){ 
    Activity.create(req.body) 
    .then(function(persistedActivity) { 
     return res.json({success : true}); 
    }) 
    .fail(function(err){ 
     return res.json({success: false}); 
     // The Activity could not be created! 
    }) 
} 

내가 약속하지 않고 SailsJS를 사용하는 것과 익숙하지 해요,하지만 당신은 done 때 대신 exec를 사용하여 시도 할 수 있습니다 : 당신이 항해의 약속이 변경을 원했고 경우

+0

수 복제를 사용하는 경우 [비동기 콜백 함수에서 값을 반환하는 방법 ?] (http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) –

+0

아니, 거기에 그것을 얻을 수 없습니다. 그것은 나에게 해결책을주지 않으며, 그것을 통과했다. –

+0

그래, 함수에서 약속을 되 돌릴 수 있겠 니? –

답변

2

,이 같을 것이다 전화 걸기 연결? 내가 exec을 사용했음을 알고 있지만, 그런 식으로는 결코 done을 사용하지 않았습니다.

- 업데이트 : 내가 확실히하려고 할 것 done()exec() 찬성되지 않는 것 같습니다 당신은의 10.x를 reference