@@ -449,39 +449,42 @@ function includePath(config, auth, response, path) {
449
449
if ( pointers . length == 0 ) {
450
450
return response ;
451
451
}
452
+ let pointersHash = { } ;
452
453
var className = null ;
453
454
var objectIds = { } ;
454
455
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 ) ;
462
461
}
463
- objectIds [ pointer . objectId ] = true ;
464
- }
465
- if ( ! className ) {
466
- throw new Parse . Error ( Parse . Error . INVALID_JSON ,
467
- 'bad pointers' ) ;
468
462
}
469
463
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
+
470
473
// 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 ;
481
484
}
485
+ return replace ;
486
+ } , { } )
482
487
483
- replace [ obj . objectId ] = obj ;
484
- }
485
488
var resp = {
486
489
results : replacePointers ( response . results , path , replace )
487
490
} ;
0 commit comments