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()가 실제로 콜백 (희망 안전한 가정)를 호출된다고 가정
가 정확히 무엇을 의미합니까 : 당신이 그것을 변경하는 경우
당신은 아마 결과를 얻을 것이다 :
은 지금이 논리적 구조를 가지고 기능? findOne 및 find의 함수는 비동기식이므로 insertUserArticleToAllSubscribers가 반환 될 때까지 실행되지 않습니다. – loganfsmyth