2016-07-18 9 views
1

numNotesを増やすのに問題があります。他のすべてがうまくいくようです。増分が機能しない

function getNotes(done) { 
    noteSchema.find({}).exec((err, notes) => { 
    var numNotes = 0; 
    async.each(notes, (n, next) => { 
     userSchema.findById(n.userId, (err, user) => { 
     if (err || !user) { next(); return; } 
     var emailsStr = utils.getEmailsString(user.emails); 
      if (!utils.toSkipEmail(emailsStr)) { 
       meetingSchema.findById(n.meetingId, function (err, meeting) { 
        if (meeting.name.displayValue.indexOf('test', 'Test') == -1) { 
         numNotes++; 
        } 
       }); 
      } 
      next(); 
     }) 
    }, (err, result) => { 
     console.log(util.format('Total Number of Notes: %d', numNotes)); 
     done(null); 
    }); 
    }); 
} 
+0

は、ブレークポイントを追加しますか? console.log()を追加します。 10行分のnumNotesを増やすには、実際に行に達しているかどうかを知る必要があります。 – nycynik

+0

ありがとうございます。はい、numNotesの前にconsole.log()行があります。 if文の結果を記録するためのインクリメント。結果は意図どおりに出力されました –

答えて

2

は、私はあなたのnext()がこれまでに実行される前に呼び出さnumNotes++取得されるかもしれないと思います。これは、Node.JSがnon-blockingであり、非同期関数が存在する場合、コードを順番に実行しないためです。 if(!utils.toSkipEmail(emailsStr)){...}ブロックの後if (meeting.name.displayValue.indexOf('test', 'Test') == -1){...}ブロックの後console.log('test 2')console.log('test 1')if(!utils.toSkipEmail(emailsStr))後のアクションの代わりに、以前のを見て、またconsole.log('test3')する

。あなたの問題は、次のことを試して固定するために

if (!utils.toSkipEmail(emailsStr)) { 

    meetingSchema.findById(n.meetingId, function(err, meeting) { 
    if (meeting.name.displayValue.indexOf('test', 'Test') == -1) { 
     numNotes++; 
    } 
    next(); 
    }); 
} else { 
    next(); 
} 
+0

ありがとうございました。それを得ることは本当に難しいです。ライン右! –

関連する問題