Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 1f04d5d

Browse files
Merge pull request #813 from ivanetchart/change_any_behavior
Avoid .any not rejecting when promises reject with no value
2 parents 4fecabe + 9175f60 commit 1f04d5d

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

q.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,9 +1645,12 @@ function any(promises) {
16451645
function onRejected(err) {
16461646
pendingCount--;
16471647
if (pendingCount === 0) {
1648-
err.message = ("Q can't get fulfillment value from any promise, all " +
1649-
"promises were rejected. Last error message: " + err.message);
1650-
deferred.reject(err);
1648+
var rejection = err || new Error("" + err);
1649+
1650+
rejection.message = ("Q can't get fulfillment value from any promise, all " +
1651+
"promises were rejected. Last error message: " + rejection.message);
1652+
1653+
deferred.reject(rejection);
16511654
}
16521655
}
16531656
function onProgress(progress) {

spec/q-spec.js

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,7 @@ describe("any", function() {
11921192
var deferreds = [Q.defer(), Q.defer()];
11931193
var promises = [deferreds[0].promise, deferreds[1].promise];
11941194

1195-
return testReject(promises, deferreds);
1195+
return testReject(promises, deferreds, new Error("Rejected"));
11961196
});
11971197

11981198
it("rejects after all promises in a sparse array are rejected", function() {
@@ -1201,26 +1201,47 @@ describe("any", function() {
12011201
promises[0] = deferreds[0].promise;
12021202
promises[3] = deferreds[1].promise;
12031203

1204-
return testReject(promises, deferreds);
1204+
return testReject(promises, deferreds, new Error("Rejected"));
12051205
});
12061206

1207-
function testReject(promises, deferreds) {
1207+
1208+
it("rejects after all promises are rejected with null", function() {
1209+
var deferreds = [Q.defer(), Q.defer()];
1210+
var promises = [deferreds[0].promise, deferreds[1].promise];
1211+
1212+
return testReject(promises, deferreds, null);
1213+
});
1214+
1215+
it("rejects after all promises are rejected with undefined", function() {
1216+
var deferreds = [Q.defer(), Q.defer()];
1217+
var promises = [deferreds[0].promise, deferreds[1].promise];
1218+
1219+
return testReject(promises, deferreds, undefined);
1220+
});
1221+
1222+
function testReject(promises, deferreds, rejectionValue) {
12081223
var promise = Q.any(promises);
1209-
var expectedError = new Error('Rejected');
1224+
var expectedError;
1225+
1226+
if (rejectionValue) {
1227+
expectedError = new Error(rejectionValue.message);
1228+
} else {
1229+
expectedError = new Error("" + rejectionValue);
1230+
}
12101231

12111232
for (var index = 0; index < deferreds.length; index++) {
12121233
var deferred = deferreds[index];
12131234
(function() {
1214-
deferred.reject(expectedError);
1235+
deferred.reject(rejectionValue);
12151236
})();
12161237
}
12171238

12181239
return Q.delay(250)
12191240
.then(function() {
12201241
expect(promise.isRejected()).toBe(true);
1221-
expect(promise.inspect().reason).toBe(expectedError);
1242+
expect(promise.inspect().reason).toEqual(expectedError);
12221243
expect(promise.inspect().reason.message)
1223-
.toBe("Q can't get fulfillment value from any promise, all promises were rejected. Last error message: Rejected");
1244+
.toBe("Q can't get fulfillment value from any promise, all promises were rejected. Last error message: " + expectedError.message);
12241245
})
12251246
.timeout(1000);
12261247
}

0 commit comments

Comments
 (0)