#node.js #reactjs #backend
Вопрос:
У меня есть кое-какой код от node.js сервер, который я пытаюсь отправить интерфейсному приложению. Когда я отображаю код в консоли, он отображается нормально, но когда я пытаюсь отправить данные на внешний интерфейс, он просто отображается как [Обещание объекта]. В функции app.get я хочу иметь возможность отправлять данные без их отображения в качестве обещания. Может ли кто-нибудь помочь вывести эти данные так, как я хочу?
async function refresh() { if (await h1.isOnline()) { console.log( "T1 : " (await t1.get_currentValue()) (await t1.get_unit()) ); console.log( "H1 : " (await h1.get_currentValue()) (await h1.get_unit()) ); console.log( "P1 : " (await p1.get_currentValue()) (await p1.get_unit()) ); } else { console.log("Module not connected"); } setTimeout(refresh, 500); } startDemo(); app.get("/", function (req, res) { res.send("T1: " t1.get_currentValue()); }); let port = process.env.PORT; if (port == null || port == "") { port = 4000; }
Комментарии:
1. Хотя я не вижу определения
get_currentValue()
, я предполагаю, что это асинхронные функции. Асинхронные функции всегда возвращают обещания. ждите обещания, а затем отправьте его.
Ответ №1:
Я предполагаю, что из ваших других примеров это t1.get_currentValue()
возвращает обещание. Таким образом, вы должны использовать либо await
или .then()
, чтобы получить значение от этого обещания, и убедитесь, что вы также обрабатываете отказы:
app.get("/", async function(req, res) { try { res.send('T1: ' await t1.get_currentValue()); } catch(e) { console.log(e); res.sendStatus(500); } });
или:
app.get("/", function(req, res) { t1.get_currentValue().then(val =gt; { res.send('T1: ' val); }).catch(e =gt; { console.log(e); res.sendStatus(500); }) });