@@ -449,39 +449,42 @@ function includePath(config, auth, response, path) {
449449 if ( pointers . length == 0 ) {
450450 return response ;
451451 }
452+ let pointersHash = { } ;
452453 var className = null ;
453454 var objectIds = { } ;
454455 for ( var pointer of pointers ) {
455- if ( className === null ) {
456- className = pointer . className ;
457- } else {
458- if ( className != pointer . className ) {
459- throw new Parse . Error ( Parse . Error . INVALID_JSON ,
460- 'inconsistent type data for include' ) ;
461- }
456+ let className = pointer . className ;
457+ // only include the good pointers
458+ if ( className ) {
459+ pointersHash [ className ] = pointersHash [ className ] || [ ] ;
460+ pointersHash [ className ] . push ( pointer . objectId ) ;
462461 }
463- objectIds [ pointer . objectId ] = true ;
464- }
465- if ( ! className ) {
466- throw new Parse . Error ( Parse . Error . INVALID_JSON ,
467- 'bad pointers' ) ;
468462 }
469463
464+ let queryPromises = Object . keys ( pointersHash ) . map ( ( className ) => {
465+ var where = { 'objectId' : { '$in' : pointersHash [ className ] } } ;
466+ var query = new RestQuery ( config , auth , className , where ) ;
467+ return query . execute ( ) . then ( ( results ) => {
468+ results . className = className ;
469+ return Promise . resolve ( results ) ;
470+ } )
471+ } )
472+
470473 // Get the objects for all these object ids
471- var where = { 'objectId' : { '$in' : Object . keys ( objectIds ) } } ;
472- var query = new RestQuery ( config , auth , className , where ) ;
473- return query . execute ( ) . then ( ( includeResponse ) => {
474- var replace = { } ;
475- for ( var obj of includeResponse . results ) {
476- obj . __type = 'Object' ;
477- obj . className = className ;
478-
479- if ( className == "_User" ) {
480- delete obj . sessionToken ;
474+ return Promise . all ( queryPromises ) . then ( ( responses ) => {
475+ var replace = responses . reduce ( ( replace , includeResponse ) => {
476+ for ( var obj of includeResponse . results ) {
477+ obj . __type = 'Object' ;
478+ obj . className = includeResponse . className ;
479+
480+ if ( className == "_User" ) {
481+ delete obj . sessionToken ;
482+ }
483+ replace [ obj . objectId ] = obj ;
481484 }
485+ return replace ;
486+ } , { } )
482487
483- replace [ obj . objectId ] = obj ;
484- }
485488 var resp = {
486489 results : replacePointers ( response . results , path , replace )
487490 } ;
0 commit comments