我尝试使用此代码并尝试获取数据并将其发送到下一个回调函数
获取此错误uncaughtException:已在节点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();
}
}
答案 0 :(得分:0)
嘛!问题是您在forEach
循环中执行回调。难怪它抱怨多次回调。
你应该做什么(假设这是一个Express处理函数)只是将done
回调移出循环:
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();
}
除此之外,您应该尝试始终return
回调:
return done();
所以你实际上会停止执行并且不会让自己陷入这种情况。