Skip to content

Commit 7da2856

Browse files
committed
Revert "Merge pull request #122 from ParsePlatform/revert-115-when_return_array"
This reverts commit e299a14, reversing changes made to 134839d.
1 parent 5e5c444 commit 7da2856

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

src/ParsePromise.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ export default class ParsePromise {
381381
*/
382382
static when(promises) {
383383
var objects;
384-
if (Array.isArray(promises)) {
384+
var arrayArgument = Array.isArray(promises);
385+
if (arrayArgument) {
385386
objects = promises;
386387
} else {
387388
objects = arguments;
@@ -390,12 +391,13 @@ export default class ParsePromise {
390391
var total = objects.length;
391392
var hadError = false;
392393
var results = [];
394+
var returnValue = arrayArgument ? [results] : results;
393395
var errors = [];
394396
results.length = objects.length;
395397
errors.length = objects.length;
396398

397399
if (total === 0) {
398-
return ParsePromise.as.apply(this, results);
400+
return ParsePromise.as.apply(this, returnValue);
399401
}
400402

401403
var promise = new ParsePromise();
@@ -406,7 +408,7 @@ export default class ParsePromise {
406408
if (hadError) {
407409
promise.reject(errors);
408410
} else {
409-
promise.resolve.apply(promise, results);
411+
promise.resolve.apply(promise, returnValue);
410412
}
411413
}
412414
};

src/__tests__/ParsePromise-test.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ describe('Promise', () => {
227227
jest.runAllTimers();
228228
}));
229229

230-
it('can handle promises in parallel', asyncHelper(function(done) {
230+
it('can handle promises in parallel with array', asyncHelper(function(done) {
231231
var COUNT = 5;
232232

233233
var delay = function(ms) {
@@ -249,7 +249,42 @@ describe('Promise', () => {
249249
generate(i);
250250
}
251251

252-
ParsePromise.when(promises).then(function() {
252+
ParsePromise.when(promises).then(function(results) {
253+
expect(called).toBe(COUNT);
254+
expect(COUNT).toBe(results.length);
255+
var actual = results;
256+
for (var i = 0; i < actual.length; i++) {
257+
expect(actual[i]).toBe(5 * i);
258+
}
259+
done();
260+
});
261+
262+
jest.runAllTimers();
263+
}));
264+
265+
it('can handle promises in parallel with arguments', asyncHelper(function(done) {
266+
var COUNT = 5;
267+
268+
var delay = function(ms) {
269+
var promise = new ParsePromise();
270+
setTimeout(() => { promise.resolve(); }, ms);
271+
return promise;
272+
};
273+
274+
var called = 0;
275+
var promises = [];
276+
function generate(i) {
277+
promises[i] = delay((i % 2) ? (i * 10) : (COUNT * 10) - (i * 10)).then(
278+
function() {
279+
called++;
280+
return 5 * i;
281+
});
282+
}
283+
for (var i = 0; i < COUNT; i++) {
284+
generate(i);
285+
}
286+
287+
ParsePromise.when.apply(null, promises).then(function() {
253288
expect(called).toBe(COUNT);
254289
expect(COUNT).toBe(arguments.length);
255290
var actual = arguments;

0 commit comments

Comments
 (0)