You can see the source code [github] :
_.filter = _.select = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
each(obj, function(value, index, list) {
if (iterator.call(context, value, index, list)) results[results.length] = value;
});
return results;
};
In short: it _.filter is synchronous and expects the callback function to also be synchronous ( if (iterator.call(context, value, index, list))).
, native .filter [MDN], .
, , !