uncaughtException:callback已经在节点js中调用

即时通讯使用此代码尝试获取数据,并将其发送到下一个callback函数

出现此错误uncaughtException:callback已在节点js中调用

function (results, done) { // sales manager condition var companysalesId = []; if (results && results.length > 0 && req.tokenInfo && req.tokenInfo.loginType === 'employee' && req.tokenInfo.role === config.roleData.sm) { results.forEach(function (v, i) { var userJson = { active: true, salesRep: { '$in': v._id } }; User.find(userJson).exec(function (err, users) { if (err) { console1.error('Error:User:UsersResults: ' + errorHandler.getErrorMessage(err)); return res.status(config.errorStatus).send({ 'errorCode': config.statusCodes.ERROR, errorMessage: errorHandler.getErrorMessage(err) }); } else { if (users && users.length > 0) { users.forEach(function (val, ind) { companysalesId.push(val.companyId); }); } if (filter.filter && !filter.filter.companyId) { filter.filter.companyId = { '$in': companysalesId }; } done(); } }); }); } else if (results && results.length == 0) { if (filter.filter && !filter.filter.companyId) { filter.filter.companyId = { '$in': companysalesId }; } done(); } else { done(); } } 

好! 问题是你在forEach循环中执行callback。 难怪它抱怨多个callback。

你真正应该做的(假设这是一个Express处理函数)只是将donecallback移出循环:

 if (results && results.length > 0 && req.tokenInfo && req.tokenInfo.loginType === 'employee' && req.tokenInfo.role === config.roleData.sm) { results.forEach(function (v, i) { var userJson = { active: true, salesRep: { '$in': v._id } }; User.find(userJson).exec(function (err, users) { if (err) { console1.error('Error:User:UsersResults: ' + errorHandler.getErrorMessage(err)); return res.status(config.errorStatus).send({ 'errorCode': config.statusCodes.ERROR, errorMessage: errorHandler.getErrorMessage(err) }); } else { if (users && users.length > 0) { users.forEach(function (val, ind) { companysalesId.push(val.companyId); }); } if (filter.filter && !filter.filter.companyId) { filter.filter.companyId = { '$in': companysalesId }; } } }); }); done(); } 

除此之外,你应该尝试总是returncallback:

 return done(); 

所以你实际上会停止执行,不会让你陷入这样的情况。