Skip to content

Commit ca7d858

Browse files
committed
👍 fixes #1298
1 parent 9c528c6 commit ca7d858

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

src/RestQuery.js

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)