gpt4 book ai didi

javascript - 每 2 秒获取一次调用,但不希望请求堆积

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

我正在尝试进行 API 调用,我希望它每 2 秒重复一次。但是,我担心如果系统在 2 秒内没有收到请求,它将建立请求并继续尝试发送它们。我怎样才能避免这种情况?

这是我试图获取的操作:

const getMachineAction = async () => {
try {
const response = await fetch( 'https://localhost:55620/api/machine/');
if (response.status === 200) {
console.log("Machine successfully found.");
const myJson = await response.json(); //extract JSON from the http response
console.log(myJson);
} else {
console.log("not a 200");
}
} catch (err) {
// catches errors both in fetch and response.json
console.log(err);
}
};

然后我用 setInterval 调用它。

function ping() {
setInterval(
getMachineAction(),
2000
);
}

我曾想过在 setInterval 中做一些类似 promise 的结构,以确保提取已成功完成,但无法让它正常工作。

最佳答案

The Promise.all() Solution

此解决方案可确保您不会错过 2 秒延迟要求,并且不会在另一个网络调用正在进行时触发调用。

function callme(){
//This promise will resolve when the network call succeeds
//Feel free to make a REST fetch using promises and assign it to networkPromise
var networkPromise = fetch('https://jsonplaceholder.typicode.com/todos/1');


//This promise will resolve when 2 seconds have passed
var timeOutPromise = new Promise(function(resolve, reject) {
// 2 Second delay
setTimeout(resolve, 2000, 'Timeout Done');
});

Promise.all(
[networkPromise, timeOutPromise]).then(function(values) {
console.log("Atleast 2 secs + TTL (Network/server)");
//Repeat
callme();
});
}
callme();

注意:这会按照问题作者的要求处理不良案例定义:

““坏情况”(即需要超过 2 秒)是我希望它跳过该请求,然后发送一个新请求。因此在 0 秒发送请求。它需要 3 秒执行,然后 2 秒后(在 5 点)它应该重新执行。所以它只是延长了发送时间。”

关于javascript - 每 2 秒获取一次调用,但不希望请求堆积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55522330/

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