Skip to content

Commit

Permalink
Avoid .any not rejecting when promises reject with no value
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivan Etchart committed May 18, 2017
1 parent 4fecabe commit a964880
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
7 changes: 5 additions & 2 deletions q.js
Original file line number Diff line number Diff line change
Expand Up @@ -1645,8 +1645,11 @@ function any(promises) {
function onRejected(err) {
pendingCount--;
if (pendingCount === 0) {
err.message = ("Q can't get fulfillment value from any promise, all " +
"promises were rejected. Last error message: " + err.message);
if (err) {
err.message = ("Q can't get fulfillment value from any promise, all " +
"promises were rejected. Last error message: " + err.message);
}

deferred.reject(err);
}
}
Expand Down
21 changes: 18 additions & 3 deletions spec/q-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1204,10 +1204,22 @@ describe("any", function() {
return testReject(promises, deferreds);
});

function testReject(promises, deferreds) {

it("rejects after all promises are rejected with no values", function() {
var deferreds = [Q.defer(), Q.defer()];
var promises = [deferreds[0].promise, deferreds[1].promise];

return testReject(promises, deferreds, true);
});

function testReject(promises, deferreds, expectNull) {
var promise = Q.any(promises);
var expectedError = new Error('Rejected');

if (expectNull) {
var expectedError = null;
}

for (var index = 0; index < deferreds.length; index++) {
var deferred = deferreds[index];
(function() {
Expand All @@ -1219,8 +1231,11 @@ describe("any", function() {
.then(function() {
expect(promise.isRejected()).toBe(true);
expect(promise.inspect().reason).toBe(expectedError);
expect(promise.inspect().reason.message)
.toBe("Q can't get fulfillment value from any promise, all promises were rejected. Last error message: Rejected");

if (!expectNull) {
expect(promise.inspect().reason.message)
.toBe("Q can't get fulfillment value from any promise, all promises were rejected. Last error message: Rejected");
}
})
.timeout(1000);
}
Expand Down

0 comments on commit a964880

Please sign in to comment.