You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							52 lines
						
					
					
						
							1.3 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
const helpers = require('../../queryhelpers');
 | 
						|
const immediate = require('../immediate');
 | 
						|
 | 
						|
module.exports = completeMany;
 | 
						|
 | 
						|
/*!
 | 
						|
 * Given a model and an array of docs, hydrates all the docs to be instances
 | 
						|
 * of the model. Used to initialize docs returned from the db from `find()`
 | 
						|
 *
 | 
						|
 * @param {Model} model
 | 
						|
 * @param {Array} docs
 | 
						|
 * @param {Object} fields the projection used, including `select` from schemas
 | 
						|
 * @param {Object} userProvidedFields the user-specified projection
 | 
						|
 * @param {Object} opts
 | 
						|
 * @param {Array} [opts.populated]
 | 
						|
 * @param {ClientSession} [opts.session]
 | 
						|
 * @param {Function} callback
 | 
						|
 */
 | 
						|
 | 
						|
function completeMany(model, docs, fields, userProvidedFields, opts, callback) {
 | 
						|
  const arr = [];
 | 
						|
  let count = docs.length;
 | 
						|
  const len = count;
 | 
						|
  let error = null;
 | 
						|
 | 
						|
  function init(_error) {
 | 
						|
    if (_error != null) {
 | 
						|
      error = error || _error;
 | 
						|
    }
 | 
						|
    if (error != null) {
 | 
						|
      --count || immediate(() => callback(error));
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    --count || immediate(() => callback(error, arr));
 | 
						|
  }
 | 
						|
 | 
						|
  for (let i = 0; i < len; ++i) {
 | 
						|
    arr[i] = helpers.createModel(model, docs[i], fields, userProvidedFields);
 | 
						|
    try {
 | 
						|
      arr[i].init(docs[i], opts, init);
 | 
						|
    } catch (error) {
 | 
						|
      init(error);
 | 
						|
    }
 | 
						|
 | 
						|
    if (opts.session != null) {
 | 
						|
      arr[i].$session(opts.session);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |