возвращает другой ответ без постоянных данных?

#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. если клиентская сторона постоянно попадает в маршрут, как сохраняются данные?