Despite your assertion, and the async.filter docs, empirical evidence suggests otherwise. I started with returning cb(results[0]), and found that when a single element is returned, it is return as a string, and guess what happens when I tried to return the 0th element of a string?  (hint: nothing good)  Or the 0th element of undefined?