带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?
Posted
技术标签:
【中文标题】带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?【英文标题】:SocketIO with Temp Sensor - I almost done DS18B20 on my Raspberry Pi with NodeJS and SocketIO, how can I extract Promise data ?带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ? 【发布时间】:2020-06-23 14:10:42 【问题描述】:我将 DS18B20 连接到 Raspberry Pi 并尝试使用 NodeJS 和 React 在浏览器上显示温度,我还使用 SocketIO 显示实时温度,因为温度总是在变化。
我有 temperature.js 从文件中获取温度,这没关系。
我有 app.js 作为带有 socketio 的服务器,我尝试调用函数但它显示 Promise pending ,然后我更改为 async/await,现在我可以获取温度但在客户端是错误的。
app.js 如下
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const port = 4001;
const index = require('./routes/index');
const getTemperature = require('./utils/temperature');
const app = express();
app.use(index);
const server = http.createServer(app);
const io = socketIO(server);
let interval;
io.on("connection", (socket) =>
console.log("New client connected");
if(interval)
clearInterval(interval);
interval = setInterval(() => getApiAndEmit(socket), 1000);
socket.on("disconnect", () =>
console.log("Client disconnected");
clearInterval(interval);
);
);
async function broadcast()
var temp = await getTemperature();
return temp;
var temperature = broadcast();
const getApiAndEmit = socket =>
const response = temperature;
console.log(response);
socket.emit("FromAPI", response);
;
server.listen(port, () => console.log(`Listening on port $port`));
来自客户端的错误 =“对象作为 React 子对象无效(找到:带有键 的对象)”
下面是console.log结果
Promise 29.062
Promise 29.062
Promise 29.062
Promise 29.062
如何从 Promise data 中获取数据???
【问题讨论】:
【参考方案1】:可以试试这个:
broadcast().then(t => console.log(t); );
【讨论】:
谢谢@ta4h1r 我猜对了,但是来自console.log(response);显示承诺未定义 然后您可以更改广播()函数中返回的内容。像这样尝试: function broadcast() return new Promise (async (resolve) => temp = await getTemperature(); resolve(temp); ); broadcast.then(t => console.log(t);) 如果我不需要console.log(t),语法是什么?非常感谢!!!! 我从客户端收到此错误 -> “对象作为 React 子对象无效(找到:带有键 的对象)。如果您要渲染子对象集合,请改用数组。 " 您需要在您拥有已解决的承诺值的位置执行您的 socket.emit。我想说最简单的方法是返回一个新的承诺,它在你的 getTemperature() 函数中解析为所需的温度值。以上是关于带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?的主要内容,如果未能解决你的问题,请参考以下文章