最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Some concern about the functions in underscore.js being async or sync - Stack Overflow

programmeradmin2浏览0评论

I have been writing code like this, and it works fine.

var result = _.filter(array, function(item){return item[key] === k;});
... // logic using the variable result

but today I suddenly realized technically this could be wrong since the filter could run asynchronously and result could not be available in the code below the filter line.

Is the filter function implemented in sync way? Or do I have to keep it in mind that filter function runs asynchronously?

Thanks in advance!

I have been writing code like this, and it works fine.

var result = _.filter(array, function(item){return item[key] === k;});
... // logic using the variable result

but today I suddenly realized technically this could be wrong since the filter could run asynchronously and result could not be available in the code below the filter line.

Is the filter function implemented in sync way? Or do I have to keep it in mind that filter function runs asynchronously?

Thanks in advance!

Share Improve this question edited Feb 20, 2013 at 18:53 zs2020 asked Feb 20, 2013 at 18:47 zs2020zs2020 54.6k30 gold badges156 silver badges223 bronze badges 0
Add a ment  | 

1 Answer 1

Reset to default 12

You can have a look at the source code [github]:

// Return all the elements that pass a truth test.
// Delegates to **ECMAScript 5**'s native `filter` if available.
// Aliased as `select`.
_.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;
};

Long story short: _.filter is synchronous and expects the callback function to be synchronous as well (if (iterator.call(context, value, index, list))).

Even more so, the function delegates to the native .filter [MDN] function, which is synchronous as well.


Not every function that accepts a callback must be asynchronous!

发布评论

评论列表(0)

  1. 暂无评论