uncaughtException:已在节点js中调用回调

时间:2017-10-27 07:10:59

标签: javascript node.js

我尝试使用此代码并尝试获取数据并将其发送到下一个回调函数

获取此错误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();
      }
    }

1 个答案:

答案 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();

所以你实际上会停止执行并且不会让自己陷入这种情况。