6

私はこのようなコードを書いてきましたが、うまくいきます。

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

しかし今日、フィルターが非同期で実行され、フィルター行の下のコードで結果を利用できないため、技術的にこれが間違っている可能性があることに突然気付きました。

フィルタ機能は同期方式で実装されていますか? または、フィルター関数が非同期で実行されることに注意する必要がありますか?

前もって感謝します!

4

1 に答える 1

12

ソースコード [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;
};

簡単 _.filterに言えば、同期であり、コールバック関数も同期することを期待しています(if (iterator.call(context, value, index, list)))。

さらに、関数はネイティブの.filter [MDN]関数に委譲します。これも同期的です。


コールバックを受け入れるすべての関数が非同期である必要はありません!

于 2013-02-20T18:51:27.537 に答える