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

Commit 59bc05c

Browse files
committed
fix handling of array argument to makeNodeResolver
With for...in enumeration the indexes are given as strings, and "0" + 1 gives "01" rather than 1. Switching to a regular for loop is a solution.
1 parent 282a299 commit 59bc05c

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

q.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@ Deferred.prototype.makeNodeResolver = function (unpack) {
15221522
resolve(Q_reject(error));
15231523
} else {
15241524
var value = {};
1525-
for (var index in unpack) {
1525+
for (var index = 0; index < unpack.length; index++) {
15261526
value[unpack[index]] = arguments[index + 1];
15271527
}
15281528
resolve(value);

test/node-test.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,32 @@ describe("node support", function () {
234234
.done(done, done);
235235
});
236236

237+
it("provides arguments as array given true", function (done) {
238+
var deferred = Q.defer();
239+
var callback = deferred.makeNodeResolver(true);
240+
callback(null, 3, 4, 5);
241+
deferred.promise.then(function (value) {
242+
expect(value.length).toBe(3);
243+
expect(value[0]).toBe(3);
244+
expect(value[1]).toBe(4);
245+
expect(value[2]).toBe(5);
246+
})
247+
.done(done, done);
248+
});
249+
250+
it("provides arguments as object given array of names", function (done) {
251+
var deferred = Q.defer();
252+
var callback = deferred.makeNodeResolver(["x", "y", "z"]);
253+
callback(null, 3, 4, 5);
254+
deferred.promise.then(function (value) {
255+
expect(Object.keys(value).length).toBe(3);
256+
expect(value.x).toBe(3);
257+
expect(value.y).toBe(4);
258+
expect(value.z).toBe(5);
259+
})
260+
.done(done, done);
261+
});
262+
237263
});
238264

239265
describe("nodeify", function () {

0 commit comments

Comments
 (0)