docs: function resultCb(that, name, i) {
          var req, update, res;
  
          update = function(success, errors, data) {
              if (that.completed[name]) {
                  throw new Error('Requirements.checkRequirements: test ' +
                                  'already completed: ' + name);
              }
              that.completed[name] = true;
              that.updateStillChecking(-1);
              if (!success) that.hasFailed = true;
  
              if ('string' === typeof errors) errors = [ errors ];
  
              if (errors) {
                  if (!J.isArray(errors)) {
                      throw new Error('Requirements.checkRequirements: ' +
                                      'errors must be array or undefined. ' +
                                      'Found: ' + errors);
                  }
                  that.displayResults(errors);
              }
  
              that.results.push({
                  name: name,
                  success: success,
                  errors: errors,
                  data: data
              });
  
              if (that.isCheckingFinished()) that.checkingFinished();
          };
  
          req = that.requirements[i];
          if ('function' === typeof req) {
              res = req(update);
          }
          else if ('object' === typeof req) {
              res = req.cb(update, req.params || {});
          }
          else {
              throw new TypeError('Requirements.checkRequirements: invalid ' +
                                  'requirement: ' + name + '.');
          }
          // Synchronous checking.
          if (res) update(res.success, res.errors, res.data);
      }