请求完成后发生反跳
Debounce to happen after a request has finished
我想创建一个简单的 debounce
函数,它会在给定的 Node.js 请求生命周期结束后发生。
让我们拥有这个简单的 Node/Express 应用程序:
const debounce = require('debounce')
const express = require('express')
const app = express()
const port = 4000
global.i = 0;
app.get('/test', (req, res) => {
debounce(() => { global.i++; }, 3000, false);
res.send(global.i.toString());
});
app.listen(port, () => console.log(`Listening on port ${port}`));
每当我调用 http://localhost:4000/
时,我都会收到 i
作为响应。
我希望只要我在 3 秒间隔内调用此端点,去抖动函数回调就不会启动,并且 i
将为 0;当我等待超过 3 秒时,它将 运行,下次我调用端点时,我会得到一个更新的值(比如 1
)。
但这并没有发生。响应结束,代码为 "dead" - debounce
函数回调永远不会被触发。
即使在 request/response 周期结束后,让事情在后台继续 运行 的正确方法是什么?
可能您希望在发送类似此代码的响应后进行去抖动
const debounce = require('debounce')
const express = require('express')
const app = express()
const port = 4000
global.i = 0;
app.get('/test', (req, res) => {
res.once('end', debounce(() => { global.i++; }, 3000, false));
res.send(global.i.toString());
});
app.listen(port, () => console.log(`Listening on port ${port}`));
我不确定。这是正确的方法还是不正确的。但是您可以使用时间戳创建去抖动。请参阅下面的示例
const express = require("express");
const app = express();
const port = 4444;
global.serverInfo = {
lastUpdate: null,
count: 0
};
app.get("/test", (req, res) => {
updateValue();
res.send(global.serverInfo.count.toString());
});
const updateValue = () => {
if (global.serverInfo.lastUpdate) clearTimeout(global.serverInfo.lastUpdate);
global.serverInfo.lastUpdate = setTimeout(() => {
global.serverInfo.count = global.serverInfo.count + 1;
}, 3000);
};
app.listen(port, () => console.log(`Listening on port ${port}`));
我想创建一个简单的 debounce
函数,它会在给定的 Node.js 请求生命周期结束后发生。
让我们拥有这个简单的 Node/Express 应用程序:
const debounce = require('debounce')
const express = require('express')
const app = express()
const port = 4000
global.i = 0;
app.get('/test', (req, res) => {
debounce(() => { global.i++; }, 3000, false);
res.send(global.i.toString());
});
app.listen(port, () => console.log(`Listening on port ${port}`));
每当我调用 http://localhost:4000/
时,我都会收到 i
作为响应。
我希望只要我在 3 秒间隔内调用此端点,去抖动函数回调就不会启动,并且 i
将为 0;当我等待超过 3 秒时,它将 运行,下次我调用端点时,我会得到一个更新的值(比如 1
)。
但这并没有发生。响应结束,代码为 "dead" - debounce
函数回调永远不会被触发。
即使在 request/response 周期结束后,让事情在后台继续 运行 的正确方法是什么?
可能您希望在发送类似此代码的响应后进行去抖动
const debounce = require('debounce')
const express = require('express')
const app = express()
const port = 4000
global.i = 0;
app.get('/test', (req, res) => {
res.once('end', debounce(() => { global.i++; }, 3000, false));
res.send(global.i.toString());
});
app.listen(port, () => console.log(`Listening on port ${port}`));
我不确定。这是正确的方法还是不正确的。但是您可以使用时间戳创建去抖动。请参阅下面的示例
const express = require("express");
const app = express();
const port = 4444;
global.serverInfo = {
lastUpdate: null,
count: 0
};
app.get("/test", (req, res) => {
updateValue();
res.send(global.serverInfo.count.toString());
});
const updateValue = () => {
if (global.serverInfo.lastUpdate) clearTimeout(global.serverInfo.lastUpdate);
global.serverInfo.lastUpdate = setTimeout(() => {
global.serverInfo.count = global.serverInfo.count + 1;
}, 3000);
};
app.listen(port, () => console.log(`Listening on port ${port}`));