2011-12-23 4 views
0

DB에 UserArticle을 추가하는 JS 함수가 있습니다 (mongoose 및 NodeJS 사용). 문제는 끝까지 도달하지 못한다는 것입니다.함수의 끝 부분에 도달하지 못했습니다.

내 말은, 대부분의 시간이 어느 곳에서 도달했는지를 확인하려고 시도했으며 Provider.findOne 또는 이전에 User.find보다 앞에 있습니다.


var insertUserArticleToAllSubscribers = function (base_ua, providerId) { 
    var Provider = mongoose.model('Provider'); 
    var User = mongoose.model('User'); 
    var UserArticle = mongoose.model('UserArticle'); 
    Provider.findOne({"twitter_id": providerId}, function (err, provider) { 
     if (err) { 
      console.log(err); 
      return; 
     } 
     if (provider) { 
      User.find({"subscribed": provider._id}, function (err, users) { 
       if (err) { 
        console.log (err); 
        return; 
       } 
       if (users) { 
        for (i in users) { 
         var ua = new UserArticle ({"user": users[i], "article":base_ua.article, "place":base_ua.place, "read":0, "starred":0}); 
         ua.save(function (err) { 
          if (err) console.log(err); 
          logAddedArticle(ua._id, users[i]); 
          console.log("ArticleAdded!: " + ua._id);    

         }); 

        } 
       } else { 
        console.log("No users"); 
       } 
      }) 
     } 
    }) 
} 

오류가 발생하지 않고 기능의 끝 부분에 도달하지 않는 이유를 알 수 없습니다. 이 코드 조각에 버그가 있습니까?

글쎄, 실제로는 기능의 끝 부분에 도달하지만 거의 항상 그렇지 않습니다.

는 Provider.findOne()가 실제로 콜백 (희망 안전한 가정)를 호출된다고 가정

+0

가 정확히 무엇을 의미합니까 : 당신이 그것을 변경하는 경우

function (...) { Provider.findOne(..., function (...) { if (err) { ... } if (provider) { User.find(..., function(...) { if (err) { ... } if (users) { ... } else { ... } }) } }) 

당신은 아마 결과를 얻을 것이다 :

은 지금이 논리적 구조를 가지고 기능? findOne 및 find의 함수는 비동기식이므로 insertUserArticleToAllSubscribers가 반환 될 때까지 실행되지 않습니다. – loganfsmyth

답변

1

이, 그때는 아마 처음 if(provider) 통화에 발생하는 else이 필요합니다 감사합니다. 당신의 끝을 말할 때

function (...) { 
    Provider.findOne(..., function (...) { 
     if (err) { ... } 
     else if (provider) {     // MAKE THIS AN ELSE IF 
      User.find(..., function(...) { 
       if (err) { ... } 
       else if (users) { ... }  // MAKE THIS AN ELSE IF! 
       else { ... } 
      }) 
     } 
     else {         // ADD THIS ELSE! 
      console.log('findOne() found nuttin :('); 
     } 
    }) 
관련 문제