#javascript #express #ecmascript-6
#javascript #выразить #ecmascript-6
Вопрос:
Я хочу смоделировать конечную точку сервера, где, когда пользователь нажимает на api n раз, ответ возвращает значение дополнительных свойств.
например, конечная точка сначала возвращает это
[{id: 1, price:null}]
затем при втором вызове возвращает это [{id: 1, price: 10}]
Я попробовал эту попытку setTimeout, не имеет смысла, потому что интерфейс (клиент) каждые секунды попадает в конечную точку, и функция снова выполняется сверху вниз.
const data = [/*...*/];
let loading;
function load() {
for(const el of data)
el.score = Math.random();
}
app.get("/api/", (req, res) => {
if(!loading) loading = setTimeout(load, 5000);
res.json({ data });
});
Ответ №1:
load
функция вызывается асинхронной, но не ответ. Помещается res.json()
в функцию обратного вызова setTimeout()
:
setTimeout(() => {
load();
res.json(data);
}, 5000);
ПРИМЕЧАНИЕ: отправка data
не {data}
Комментарии:
1. это не имеет значения? клиентская сторона вызывает конечную точку каждые секунды..
Ответ №2:
Вы этого хотели? Я не понял, почему вы использовали переменную ‘loading’.
const data = [{ id: 1, price: null }];
let loading;
function load() {
for (const el of data) el.price = Math.random();
}
app.get("/api", (req, res) => {
// if (!loading) loading = setTimeout(load, 5000);
// res.json({ data });
load();
res.json(data);
});
Если функция load() требует времени, вам может потребоваться рассмотреть возможность переноса этого как обещание.
Комментарии:
1. если клиентская сторона постоянно попадает в маршрут, как сохраняются данные?