更新:スロットルが過剰な関数呼び出しを削除することがわかったので、正しいツールではありません。あまりにも速く行ったり、アイテムを削除したりせずに、キュー内のすべてのアイテムを処理するという慣用的なやり方はまだ好きです。速度制限関数がTypescriptを呼び出す
レート制限付きのAPIに当たるノードアプリケーションを作成しています。私はそれらを送ることが許されているよりもずっと早くコールを作ることができます。私はコールの待ち行列を消費したいですが、あまりにも速く行ったり、それらのいずれかをドロップすることなく。私は自分の悩みを説明するために、小さなtypscriptテストを行った:
import * as _ from "lodash";
let start = new Date().getTime();
function doLog(s: string) {
let elapsed = new Date().getTime() - start;
console.log(`${s} ${elapsed}`);
}
let array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
let throttled = _.throttle(doLog, 100);
array.forEach(s => throttled(s));
私はおおよそのような出力を見ると期待:
a 2
b 101
c 203
d 302
e 405
f 502
g 603
h 706
i 804
j 902
しかし、その代わりに、私は以下を参照してください
a 2
j 101
私は」いくつかの奇妙な観察ve製:
- スロットルが100msのとき、si配列のzeが無関係のように見えます:2つの要素か20かに関係なく、配列の最初と最後の項目を出力します。
- 1msのスロットルでは、配列の前面から3〜6要素、要素
これは抑制されたものではありません。 [ドキュメント](https://lodash.com/docs#throttle)を参照してください。あなたが望む振る舞いをする独自のクラスを書くことができます...私はそれを処理するためにロダッシュには何もないと思います。 –
私はすでにやりました。私はDavid Corbachoの記事をドキュメントにリンクして読んでいます。ドキュメントには、「抑制された関数には、遅延func呼び出しを取り消すキャンセルメソッドと、即座に呼び出すためのフラッシュメソッドが付属しています。そのフレーズ「遅延ファンクション呼び出し」は、私にキューイングされた呼び出しのように聞こえます...しかし、私は間違っているように聞こえますが、これは問題ありません。私は別の機能/ユーティリティを使用する必要がありますか? –