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
			| 
											3 years ago
										 | '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); | ||
|  |     } | ||
|  |   } | ||
|  | } |