递增不起作用

我无法获得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); }); }); } 

我认为你的next()可能会在numNotes++运行之前被调用。 这是因为Node.JS是非阻塞的 ,如果存在asynchronous函数,则不会按顺序运行您的代码。

要查看前面的操作,在if(!utils.toSkipEmail(emailsStr)) console.log('test 1')之后放置一个console.log('test 1') if(!utils.toSkipEmail(emailsStr)) ,一个console.log('test 2') if (meeting.name.displayValue.indexOf('test', 'Test') == -1){...} if(!utils.toSkipEmail(emailsStr)){...}if (meeting.name.displayValue.indexOf('test', 'Test') == -1){...} block,还有一个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(); }