gpt4 book ai didi

javascript - throttle/去抖每秒调用次数

转载 作者:行者123 更新时间:2023-11-30 16:17:09 30 4
gpt4 key购买 nike

我正在使用一个 API,它只允许您使用像 request-promiseaxios 这样的 promise 请求库每秒进行 200 次调用(1000 毫秒)怎么可能你使用 rx.js 去抖/限制对 URL/服务器的请求?我注意到一个 throttle method在 rx 文档中,但它不会计算每秒的调用次数。

这是一个包装 promise 并将它们排队以说明 API 速率限制的函数。我正在寻找与 Rx 类似的功能。

var Promise = require("bluebird")

// http://stackoverflow.com/questions/28459812/way-to-provide-this-to-the-global-scope#28459875
// http://stackoverflow.com/questions/27561158/timed-promise-queue-throttle

module.exports = promiseDebounce

function promiseDebounce(fn, delay, count) {
var working = 0, queue = [];
function work() {
if ((queue.length === 0) || (working === count)) return;
working++;
Promise.delay(delay).tap(function () { working--; }).then(work);
var next = queue.shift();
next[2](fn.apply(next[0], next[1]));
}
return function debounced() {
var args = arguments;
return new Promise(function(resolve){
queue.push([this, args, resolve]);
if (working < count) work();
}.bind(this));
}
}

最佳答案

因此,前几天我遇到了一个类似的问题,用于限制对资源的访问速率。我遇到了这个 repo bahmutov/node-rx-cycle .这是 Plunker Demo 中的示例我放在一起来证明这一点。它从文本输入字段获取输入并将其添加到 <ul> 前面.每个<li>仅每 1000 毫秒添加一次,其他的都在排队。

// Impure
const textInput = document.querySelector('.example-input');
const prependToOutput = function(item) {
const ul = document.querySelector('.example-output');
const li = document.createElement('li');
li.appendChild(document.createTextNode(item));
ul.insertBefore(li, ul.firstChild);
};

// Pure
const eventTargetValue = function(ele) { return ele.target.value; };
const textInputKeyUpStream = Rx.Observable
.fromEvent(textInput, 'keyup')
.map(eventTargetValue);

// Stream
rateLimit(textInputKeyUpStream, 1000)
.timeInterval()
.map(function(ti) { return ti.value + ' (' + ti.interval + 'ms)'; })
.subscribe(prependToOutput);

希望这对您有所帮助。

关于javascript - throttle/去抖每秒调用次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321352/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com